在Go Programming Language的第 308 頁上,它說
一個名為 main 的包通常會生成一個可執行程式,但它也可以作為庫匯入。
但是當我嘗試它時,我得到一個錯誤: imp.go:5:5: import "foo" is a program, not an importable package
所以……他們在說什么?如何將主包作為庫匯入?
我的試用代碼只是:
imp.go
package main
import (
"fmt"
"foo"
)
func main() {
fmt.Println(foo.Hi)
}
foo/foo.go
package main
import "fmt"
var Hi int = 3
func main() {
fmt.Printf("Hi %d!\n", Hi)
}
uj5u.com熱心網友回復:
相關:從其他包訪問主包
我最好的猜測是,這本書在寫這本書時是真的,但后來變得不可能了。golang/go#4210是相關問題,似乎阻止它作業的更改在 2015 年年中登陸,而這本書僅在幾個月后出版。
uj5u.com熱心網友回復:
確實,go 代碼可以有一個 main 并作為包匯入,但不能包含“main”函式的包。我的建議是將你所有的業務代碼放在一個單獨的包中(例如,在一個子目錄中),并讓主包做最少的事情(例如初始化你的應用程式和阻塞)。這樣,您可以匯入任何代碼包,除了主包。
但是,作為一種好的做法,如果您有一個包含要匯入某些代碼的程式的存盤庫,我建議您為此代碼創建一個不同的存盤庫,以使其成為一個獨立的庫。
uj5u.com熱心網友回復:
似乎可以從同一包的測驗中匯入“主”包。
有一個檔案foo/foo_test.go:
package main_test
import (
"fmt"
"foo"
"testing"
)
func TestFoo(t *testing.T) {
fmt.Println(main.Hi)
}
這行得通。注意匯入路徑“foo”會產生一個識別符號main。
由于該陳述句出現在測驗一章中,他們的意思一定是“它也可以在測驗中作為庫匯入”,但他們忽略了這個條件!
據我所知,這本書出版時(Go 版本 1.5)的情況與現在(Go 版本 1.17)相同,因為fstanis提到了更改 10925。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/419546.html
標籤:
