go - 使用 Golang 包对象(.a 文件)
问题描述
我正在尝试了解软件包的 go install 命令。我使用 go install 命令安装我的包,我想尝试使用它。假设原始包有目录“github.com/abc/greeting”所以我们可以调用该方法
package main
import "github.com/abc/greeting"
func main() {
greeting.Greet()
}
当我对问候包使用“go install”时,它会在“$GOPATH/pkg/$ARCH/github.com/abc”目录中创建一个“greeting.a”。
如何在我的代码中使用这个编译的包对象?
解决方案
如何在我的代码中使用这个编译的包对象?
正如@JimB 的回答,不,你不能做那样的事情。但是,您可以使用go plugin API来实现类似的结果。
在 go plugin 中,该包将被编译为带有扩展名的所谓插件文件。.so
然后从主包中,您可以打开特定插件并查找功能。例子:
p, err := plugin.Open("greeting.so")
if err != nil {
panic(err)
}
greetFunc, err := p.Lookup("Greet")
if err != nil {
panic(err)
}
greetFunc.(func())() // call the Greet function
另外仅供参考,go 有一个叫做Binary-only package 的东西,但是似乎 API 很快就会被删除https://github.com/golang/go/issues/28152
推荐阅读
- javascript - 通过DOM向html标签元素添加事件
- python - 如何删除多对多孤儿
- c# - I can't see the input value in the input in html controller
- sql - Conditional function not working as intended postgresql
- python - “qgis:heatmapkerneldensityestimate”中的输出参数不起作用
- database - Sqlite3 Disk I/O error encountered after a while, but worked after using copy of db
- javascript - 如何返回从 .then 语句中获取 api 数据接收到的数组?
- c# - Change Email From Direction in C#
- git - 如何对异常缓慢的 git-diff 进行故障排除?
- node.js - 从头开始构建nodejs时如何启用puppeteer