Golang plugin 插件例子
来源:互联网 发布:淘宝店铺首页显示不全 编辑:程序博客网 时间:2024/04/20 19:28
好像手上有场景可以用Go1.8的插件来弄,写了个例子.
plug3/plug3.go:
package main/*封装Key到.soAuthor: XCLDate: 2017-7-16*/type ApiKey struct {key string}var myApiKey ApiKeyfunc init() {myApiKey = ApiKey{key: "xcl"}}func main() {}// so导出的函数名func GetEmailAppKey() func() string {return myApiKey.GetKey}func (k *ApiKey) GetKey() string {return k.key}
main.go:
package main/*Golang 插件例子, go1.8以上才支持,且例子仅跑在linux上 编译出.so go build -tags example -o plug3.so -buildmode=plugin plug3/plug3.go 编译主文件 go build -tags example -o plugdemo main.go 使用例子 ./plugdemo ./plug3.soAuthor: XCLDate: 2017-7-16*/import ("errors""fmt""os""plugin")const (fnKey = "GetEmailAppKey")func main() {if len(os.Args) < 2 {fmt.Println("请传入.os。")os.Exit(1)}pluginFilename := os.Args[1]if _, err := os.Stat(pluginFilename); os.IsNotExist(err) {fmt.Println(".os不存在。")os.Exit(1)}plug, err := plugin.Open(pluginFilename)if err != nil {fmt.Println(err)os.Exit(1)}fn, err := GetPluginKeyFnsByName(plug, fnKey)if err != nil {fmt.Println(err)os.Exit(1)}nn := fn()fmt.Println(" appKey:", nn)}func GetPluginKeyFnsByName(p *plugin.Plugin, symbolName string) (func() string, error) {if p == nil {return nil, errors.New("p为空指针.")}sym, err := p.Lookup(symbolName)if err != nil {return nil, err}fn, ok := sym.(func() func() string)if !ok {return nil, fmt.Errorf("symbol:%T ", sym)}if fn() == nil {return nil, errors.New("fn为空.")}return fn(), nil}
Blog: blog.csdn.net/xcl168
阅读全文
0 0
- Golang plugin 插件例子
- golang的 IntelliJ Idea插件 google-go-lang-idea-plugin 编译方法 build in windows
- IntelliJ Idea 14 安装 Golang 插件 google-go-lang-idea-plugin 的方法
- 最新 IntelliJ Idea 14 安装 Golang 插件 google-go-lang-idea-plugin 的方法
- Plugin插件
- Plugin插件
- Plugin插件
- Plugin插件
- 插件 plugin
- golang tls 似乎例子
- golang rand 随机例子
- golang websocket的例子
- golang使用protobuf例子
- Restful API例子(Golang)
- golang socket 例子
- golang chan 使用例子
- Firefox插件开发(5)——编译和测试第一个Plugin例子:npruntime
- IDEA集成golang插件
- 异常处理
- <Lisp面面观>松本行弘谈Lisp元编程
- Maven实战学习笔记2
- TX2系统安装
- 内存泄漏常见代码片段
- Golang plugin 插件例子
- 1161: 字符串长度(指针专题)
- CSS代码的简写
- 数据结构基础与常见算法
- gcc 编译工具(下)--- 外部库、共享库、静态库、动态库
- Python
- django项目简单搭建(不包含书写业务逻辑)
- Linux 关机重启命令
- 1029. Median (25)