buildmode=c-archive
更多关于Golang Go语言中能否生成客户端 dll 被调用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
牛,我看了半天没看懂题目…
🙏
可以生成动态库
记得 windows 还未支持,不过可以生成静态库然后在封装成动态库,go-cn 邮件列表大牛给的方法,我没试过。
1.10 差不多可以支持 Windows 了。可以参考 Go 高级编程 cgo 章节。
今年的 gopherChina2018 我会做一个 深入 cgo 编程 的报告
dll 不清楚,但是生成 SDK 可以,也就是 binary package。
这样子可以只暴露接口给别人看,也相当于 dll 啦
http://yonghaowu.github.io//2016/11/09/GolangBinaryPackage/
好像 go 1.10 支持 直接生成 windows dll 了,有人试过了么
在Go语言中,直接生成传统的Windows动态链接库(DLL)作为客户端调用并不直接支持,因为Go的编译模型与传统C/C++有所不同。Go的编译目标是生成单一可执行文件,而非动态库,且Go的运行时(runtime)管理着内存和goroutines等,这在标准的DLL结构中并不常见。
然而,有几种方法可以实现类似功能:
-
使用cgo和C接口:你可以通过cgo将Go代码与C代码结合,然后编译C代码为DLL。这样,你的Go代码将作为C代码的一部分被编译进DLL中,其他客户端可以通过C接口调用Go函数。
-
使用Go插件:虽然这不是生成DLL的直接方法,但Go的插件机制允许动态加载代码。不过,插件机制在Windows上的支持并不如Linux上完善,且主要用于Go程序内部动态加载Go代码。
-
通过HTTP/RPC等网络通信:将Go服务部署为独立的服务器,客户端通过HTTP、RPC或其他网络通信协议调用服务。这种方法避免了直接生成DLL的需求,同时提供了更好的跨平台支持和可扩展性。
综上所述,虽然Go语言本身不直接支持生成客户端DLL,但通过cgo、插件机制或网络通信等方式,可以实现类似的功能。选择哪种方法取决于你的具体需求和目标平台。