go - 不向 dll 或 iso 文件添加扩展名是一种不好的做法吗?
问题描述
我正在使用 go 插件包,并按照指南,他们说我应该使用创建一个 iso 文件,buildmode=plugin
并且输出应该具有扩展名so
. 这是经验法则吗?我应该总是添加扩展名吗?还是口味问题?
谢谢!
解决方案
通常,插件(有时称为共享/动态库)具有依赖于它们运行的平台的扩展。
对于 Windows,该扩展名往往是.dll
(对于“动态链接库”)。但是,在撰写本文时,Go 不支持 Windows 插件。
对于 Linux/BSD 系统,该扩展往往是.so
(用于“共享对象”)这是 Go 文档建议您使用的。
按照package的文档plugin
,它看起来像这样(在 Linux 上):
// after go build -buildmode=plugin -o plugin_name.so
p, err := plugin.Open("plugin_name.so")
if err != nil {
panic(err)
}
v, err := p.Lookup("V")
if err != nil {
panic(err)
}
f, err := p.Lookup("F")
if err != nil {
panic(err)
}
*v.(*int) = 7
f.(func())() // prints "Hello, number 7"
简而言之:使用.so
.
推荐阅读
- kubernetes - 我想在不同的命名空间同一个集群中启用 pod 到 pod 的通信
- python - 使用 asyncio 进行多进程队列同步
- jquery - 第一次悬停时如何关闭动画,这个“使用jQuery悬停在菜单上的滑动动画”小提琴?
- windows - WritePrivateProfileString 产生 ERROR_FILE_NOT_FOUND
- typo3 - Extbase 对象的属性在 FLUID 中返回 NULL,但仅在直接调用时
- c# - 图像资源作为图像源不显示
- kubernetes - NodePort 服务不会将请求重定向到另一个节点
- swift - 在特定条件下不调用类扩展中的协议方法
- java - 如何禁用数据透视表阅读以创建工作簿
- swift - 如何从 ViewController.swift 引用函数内的 URL 对象?