2 回答

TA貢獻1836條經驗 獲得超13個贊
簡短的回答:有點?
聽起來您要完成的是一個共享庫。
Go 編譯器從 1.5 開始就可以使用-buildmode=c-shared
構建標志生成共享庫:
go?build?-o?helloworld.so?-buildmode=c-shared
而且,從Go 1.10開始,Windows 還支持該功能
所以,編譯成DLL也是一行:
go?build?-o?helloworld.dll?-buildmode=c-shared
您將要遇到的問題實際上是使用這些庫,尤其是以跨操作系統的方式:
在 *nix 中,您可以使用 CGO 來完成此操作:
package example
// #cgo LDFLAGS: -lfoo
//
// #include <foo.h>
import "C"
func main() {
? ? C.bar()
}
Windows 擁有自己的Wiki(誰感到驚訝?)。
我會給你一些關于這個的想法:
15-20mb 的二進制文件沒有任何問題(雖然,您應該嘗試使用upx來減少一些脂肪,因為為什么不呢?),當您推動 10 到 100 的演出時,您應該擔心。現在空間很便宜。
編寫可以編譯成單個二進制文件的東西,而不管操作系統如何,是 Go 最好的好處之一。
CGO_ENABLED=0
為您的二進制文件節省大量空間。保持啟用狀態(您需要使用這些功能)對您沒有任何好處。您正確地認為,由于編譯器無法針對包含的庫進行優化,因此最終您不會在小型用例中節省太多空間(如果有的話)。
我的最后一點,那我就不再對你說教了:專注于編寫代碼。二進制大小不應該是你關心的問題,除非你試圖適應嵌入式設備。
祝你好運朋友。

TA貢獻1712條經驗 獲得超3個贊
您運送的物品彼此密切相關嗎?如果是這樣,將它們組合成一個可執行文件可能更有意義,該可執行文件在命令行上接受命令來決定開始執行哪個“可執行文件”。
因此,您不必運送“cmd1”、“cmd2”和“cmd3”,而只需運送一個可以通過這種方式調用的程序
$ prog cmd1 $ prog cmd2 $ prog cmd3
您必須做一些額外的工作來解析第一個參數并決定啟動哪個子命令。
- 2 回答
- 0 關注
- 189 瀏覽
添加回答
舉報