内容简介:在1.8之前,如果我们想用第三方的库,只能获取到源码才可以,而不能使用编译后的代码,比如jar、dll、so文件。不过1.8中新加入了plugin包,我们可以通过这个包来实现调用、访问编译后方法和变量的功能,不过到目前版本(1.11.1)为止还不支持windows(几年没碰过这超恶心的os了,真嗨森。。。)。plugin 是一个包含可导出(首字母大写)函数和变量的main包。当一个plugin首次被打开的时候,是在所有包中的init方法已经调用完成之后,main方法执行之前。一个plugin只会被初始化一
在1.8之前,如果我们想用第三方的库,只能获取到源码才可以,而不能使用编译后的代码,比如jar、dll、so文件。不过1.8中新加入了plugin包,我们可以通过这个包来实现调用、访问编译后方法和变量的功能,不过到目前版本(1.11.1)为止还不支持windows(几年没碰过这超恶心的os了,真嗨森。。。)。
plugin 是一个包含可导出(首字母大写)函数和变量的main包。当一个plugin首次被打开的时候,是在所有包中的init方法已经调用完成之后,main方法执行之前。一个plugin只会被初始化一次,并且不会被关闭。plugin的操作都是协程安全的。
下面我们将会举个例子说明plugin包如何使用(类型转换,函数传参调用,修改变量的值)。plugin.go:
package main
import "fmt"
func Say(str string) string{
return fmt.Sprintf("Hello, my name is: %s, addr is: %s\n",str,Addr)
}
var Addr = "default home address"
编译plugin需要使用-buildmode=plugin参数,编译后是一个.so文件:
go build --buildmode=plugin plugin.go
看一下caller.go:
package main
import (
"fmt"
"os"
"plugin"
)
func main() {
p, err := plugin.Open("plugin.so")
if err != nil {
panic(err)
}
sb, err := p.Lookup("Say")
if err != nil {
panic(err)
}
sbs := sb.(func(string) string)
if len(os.Args) > 2 {
str, err := p.Lookup("Addr")
if err != nil {
panic(err)
}
*str.(*string) = os.Args[2]
}
fmt.Println(sbs(os.Args[1]))
}
如果运行main的时候,有一个参数,则将参数传递给plugin中的Say方法(调用plugin函数);如果有两个或以上的参数,则第二个参数将会替换掉plugin中的Addr变量的值(修改plugin变量)。例如:
go run caller.go jingege #Hello, my name is: jingege, addr is: default home address go run caller.go jingege chengdu #Hello, my name is: jingege, addr is: chengdu
注意
- 1、plugin必须是在main包下,即 package mian
- 2、编译plugin的时候,必须使用--buildmode=plugin参数
- 3、Lookup只能查找可导出的成员(方法,变量等),并且返回参数为指针,需要转换成对应的类型才能使用
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Data Structures and Algorithms in Java
Robert Lafore / Sams / 2002-11-06 / USD 64.99
Data Structures and Algorithms in Java, Second Edition is designed to be easy to read and understand although the topic itself is complicated. Algorithms are the procedures that software programs use......一起来看看 《Data Structures and Algorithms in Java》 这本书的介绍吧!