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

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