4 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊
可能是你通過 GO111MODULE = on 顯式啟用了 go 模塊,然后tour的代碼下載到$GOPATH/pkg/mod/golang.org/x/tour@v0.0.0-20191002171047-6bb846ce41cd目錄下,但是tour程序通過ctx.Import查找tour src代碼dir,此時(shí)只會(huì) from $GOROOT/src/golang.org/x/touror $GOPATH/src/golang.org/x/tour,而不會(huì) from $GOPATH/PKG/mod,所以導(dǎo)致 can not找到旅游源代碼目錄。
解決方案:
解決方案1:復(fù)制$GOPATH/pkg/mod/golang.org/x/tour@v0.0.0-20191002171047-6bb846ce41cd到$GOPATH/src/golang.org/x/tour
方案二:修改游覽源local.go文件
func findRoot() (string, error) {
...
if os.Getenv("GO111MODULE") == "on" {
pkgDir := filepath.Join(os.Getenv("GOPATH"), "pkg", "mod")
cfg := &packages.Config{Mode: packages.LoadFiles, Dir: pkgDir}
pkgs, _ := packages.Load(cfg, basePkg)
for _, pkg := range pkgs {
for _, goFile := range pkg.GoFiles {
root := filepath.Dir(goFile)
if isRoot(root) {
return root, nil
}
}
}
}
return "", fmt.Errorf("could not find go-tour content; check $GOROOT and $GOPATH")
}

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
對(duì)于遇到此問題并且只想進(jìn)行游覽的任何人,您可以隨時(shí)導(dǎo)航到$HOME\go\pkg\mod\golang.org\x\tour@version
,然后執(zhí)行以下操作go run .

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊
我看到了同樣的問題。按照Andy的回答,問題仍然沒有解決。我查了local.go文件中findRoot函數(shù)的代碼,它依賴于build.Default,也就是build.defaultContext()的返回值。它返回從環(huán)境變量讀取 GOPATH 的默認(rèn)上下文。從源代碼build/build.go我看到:
func defaultContext() Context {
? ? var c Context
? ? c.GOARCH = envOr("GOARCH", runtime.GOARCH)
? ? c.GOOS = envOr("GOOS", runtime.GOOS)
? ? c.GOROOT = pathpkg.Clean(runtime.GOROOT())
? ? c.GOPATH = envOr("GOPATH", defaultGOPATH())
? ? // code omitted
? ? return c
}
但是,當(dāng)我們使用go env -w GOPATH="/Users/elk/ccode/go"命令設(shè)置 GOPATH 時(shí),該值僅保存在 go env 中,而不保存在您的系統(tǒng)環(huán)境中。因此,當(dāng)您運(yùn)行游覽時(shí),由于 GOPATH 為空,因此它使用默認(rèn)路徑值,通常是/Users/elk/go,這會(huì)導(dǎo)致找不到游覽內(nèi)容。
這可能是因?yàn)椤秶逯谩肥?011年寫的,當(dāng)時(shí)我們還需要設(shè)置GOPATH環(huán)境變量。但后來(lái) Go 改進(jìn)了設(shè)置,但是 go 之旅中的遺留代碼并沒有相應(yīng)改變。
因此,一個(gè)快速的解決方案是在 .bashrc 文件中設(shè)置 GOPATH 變量?;蛘咧皇莈xport GOPATH="Users/elk/ccode/go"在運(yùn)行游覽程序之前在命令行中臨時(shí)使用。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
嘗試以下步驟:
出發(fā)
GO111MODULE
_
export GO111MODULE=off
確保您不在
$GOPATH
目錄內(nèi)(如果在目錄內(nèi),只需運(yùn)行cd ~
)運(yùn)行
go get
命令
go get golang.org/x/tour
- 4 回答
- 0 關(guān)注
- 246 瀏覽
添加回答
舉報(bào)