我正在用 Go 編寫一個庫。我計劃分發它,主要要求是“無源代碼”。為了測試,我創建了兩個工作區,如下所示,WS1倉/pkg/linux_amd64/lib.asrc/lib/src.goWS2倉/包/src/main/main.go我的第一個工作區 (WS1) 是實際的虛擬庫,它具有一些實用功能。第二個工作區 (WS2) 具有使用來自 WS1 的包 (lib.a) 的主要功能。在我從 WS1 中刪除源之前,一切都運行良好。如果我刪除 WS1 中的目錄 /lib/src.go,在 go build 期間我會收到以下錯誤,main.go:5:2:在以下任何一個中找不到包“lib”:/usr/local/go/src/pkg/lib(來自 $GOROOT)../Testing/ws1/src/lib(來自 $GOPATH)上面的消息表明我們也應該保留源文件。單獨的預編譯二進制包不能直接使用。根據網上的一些建議,我們可能會保留一些時間戳值小于二進制包時間戳的虛擬源。但是,這對我們來說似乎不是一個可行的解決方案。如果虛擬源的時間戳不幸更新了會發生什么?我在這里看到過類似的問題, https://github.com/golang/go/issues/2775我的問題:分發源碼是 Golang 唯一的可能嗎?為什么 Go 沒有提供直接使用“.a”文件的規定?如果 Go 必須保留源代碼,為什么 Go 中沒有提到這個小東西?(或)我在這里遺漏了什么嗎?在此先感謝您的幫助!
3 回答

一只名叫tom的貓
TA貢獻1906條經驗 獲得超3個贊
Go 編譯器只需要這些.a
文件。如果您運送它們,任何人都可以在沒有源代碼的情況下使用您的軟件包。
但是您的用戶將不得不手動調用編譯器(例如6g
,不是go
工具)。如果您發送一個myfoo.a
文件和一個myfoo.go
僅包含的虛擬源,package myfoo
并且 的時間戳myfoo.a
比 的新myfoo.go
(并且您將所有內容都放在適當的位置),您可以使用該go
工具。
更新:go 工具的較新版本檢測已刪除的文件,并要求所有文件(可能為空)在 src 文件夾中具有正確的文件名和較舊的時間戳。管理時間戳不應該成為破壞者。
不要誤以為該go
工具是Go:它是構建、測試、獲取任何 Go 代碼的非常方便的工具,但它既不是語言,也不是編譯器,也不是鏈接器。
順便說一句:不分發源確實沒有意義。
- 3 回答
- 0 關注
- 225 瀏覽
添加回答
舉報
0/150
提交
取消