我正在发送几个用Go编译的可执行文件.每个可执行文件本身不包含大量代码,但每个可执行文件都使用包含日志记录,配置管理,通信层等的公共库.
这导致每个可执行文件在15-20mb之间,有时只有1000行代码.
Go中是否有一种方法(目前可用或计划用于将来的版本),允许将应用程序分成几个文件(即Windows中的dll,.so Linux/Mac)?
我知道我可以编译库然后将其用作外部二进制文件但是我不会从类型系统和Go编译器优化中获益.我错了,有办法吗?
简短的回答:那种?
听起来你想要完成的是一个共享库.
Go编译器已经能够使用-buildmode=c-sharedbuild标志生成1.5以来的共享库:
go build -o helloworld.so -buildmode=c-shared
Run Code Online (Sandbox Code Playgroud)
而且,从Go 1.10开始,Windows还支持该功能
因此,编译为DLL也是一个单行:
go build -o helloworld.dll -buildmode=c-shared
Run Code Online (Sandbox Code Playgroud)
您将遇到的问题实际上是使用这些库,尤其是在跨操作系统方式中:
在*nix中,您可以使用CGO来完成此任务:
package example
// #cgo LDFLAGS: -lfoo
//
// #include <foo.h>
import "C"
func main() {
C.bar()
}
Run Code Online (Sandbox Code Playgroud)
Windows获得了自己的Wiki(谁感到惊讶?).
我会给你留下一些想法:
CGO_ENABLED=0从二进制文件中节省大量空间.保持启用(您需要使用这些功能),对您没有任何好处.我的最后一点,然后我会停止向你讲道:专注于编写代码.除非您尝试使用嵌入式设备,否则不应该考虑二进制大小.
祝你好运的朋友.
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |