亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

本地運行 Go Tour 時出錯:找不到游覽文件:找不到 go-tour 內容;

本地運行 Go Tour 時出錯:找不到游覽文件:找不到 go-tour 內容;

Go
慕桂英3389331 2023-07-17 14:56:04
go version go1.12.9 darwin/amd64安裝該golang.org/x/tour軟件包后,我運行命令tour并收到錯誤:Couldn't find tour files: could not find go-tour content; check $GOROOT and $GOPATH這是輸出go env:GOARCH="amd64"GOBIN=""GOCACHE="/Users/elk/Library/Caches/go-build"GOEXE=""GOFLAGS=""GOHOSTARCH="amd64"GOHOSTOS="darwin"GOOS="darwin"GOPATH="/Users/elk/ccode/go"GOPROXY="https://goproxy.io"GORACE=""GOROOT="/usr/local/go"GOTMPDIR=""GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"GCCGO="gccgo"CC="clang"CXX="clang++"CGO_ENABLED="1"GOMOD="/dev/null"CGO_CFLAGS="-g -O2"CGO_CPPFLAGS=""CGO_CXXFLAGS="-g -O2"CGO_FFLAGS="-g -O2"CGO_LDFLAGS="-g -O2"PKG_CONFIG="pkg-config"GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/5d/q9dj2fxx4t71w0g5g00cvlkh0000gn/T/go-build144784202=/tmp/go-build -gno-record-gcc-switches -fno-common"我在里面添加兩行.zshrc:export GOPATH="$HOME/ccode/go"export PATH="$PATH:$GOPATH/bin"該命令go get golang.org/x/tour運行時沒有錯誤。奇怪的是: echo $GOROOT會顯示一個空行并且echo $GOPATH與 一致go env。
查看完整描述

4 回答

?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

可能是你通過 GO111MODULE = on 顯式啟用了 go 模塊,然后tour的代碼下載到$GOPATH/pkg/mod/golang.org/x/[email protected]目錄下,但是tour程序通過ctx.Import查找tour src代碼dir,此時只會 from $GOROOT/src/golang.org/x/touror $GOPATH/src/golang.org/x/tour,而不會 from $GOPATH/PKG/mod,所以導致 can not找到旅游源代碼目錄。


解決方案:


解決方案1:復制$GOPATH/pkg/mod/golang.org/x/[email protected]到$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")

}


查看完整回答
反對 回復 2023-07-17
?
森林海

TA貢獻2011條經驗 獲得超2個贊

對于遇到此問題并且只想進行游覽的任何人,您可以隨時導航到$HOME\go\pkg\mod\golang.org\x\tour@version,然后執行以下操作go run .



查看完整回答
反對 回復 2023-07-17
?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

我看到了同樣的問題。按照Andy的回答,問題仍然沒有解決。我查了local.go文件中findRoot函數的代碼,它依賴于build.Default,也就是build.defaultContext()的返回值。它返回從環境變量讀取 GOPATH 的默認上下文。從源代碼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


}

但是,當我們使用go env -w GOPATH="/Users/elk/ccode/go"命令設置 GOPATH 時,該值僅保存在 go env 中,而不保存在您的系統環境中。因此,當您運行游覽時,由于 GOPATH 為空,因此它使用默認路徑值,通常是/Users/elk/go,這會導致找不到游覽內容。


這可能是因為《圍棋之旅》是2011年寫的,當時我們還需要設置GOPATH環境變量。但后來 Go 改進了設置,但是 go 之旅中的遺留代碼并沒有相應改變。


因此,一個快速的解決方案是在 .bashrc 文件中設置 GOPATH 變量。或者只是export GOPATH="Users/elk/ccode/go"在運行游覽程序之前在命令行中臨時使用。


查看完整回答
反對 回復 2023-07-17
?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

嘗試以下步驟:

  1. 出發GO111MODULE_

   export GO111MODULE=off
  1. 確保您不在$GOPATH目錄內(如果在目錄內,只需運行cd ~

  2. 運行go get命令

   go get golang.org/x/tour


查看完整回答
反對 回復 2023-07-17
  • 4 回答
  • 0 關注
  • 232 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號