日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

goland go test 多个文件_这个代码怎么会编译不通过?Goland 新手常见问题解决:GOPATH 和 Go Modules 编译不成功...

發布時間:2024/9/19 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 goland go test 多个文件_这个代码怎么会编译不通过?Goland 新手常见问题解决:GOPATH 和 Go Modules 编译不成功... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方藍色“Go語言中文網”關注我們,設個星標,每天學習Go語言

自從 Go1.11 開始,官方開始支持依賴管理,這就是 Go Modules。如果你對 Go Modules 還不熟悉,請一定要掌握,Go 1.13 默認會使用它。推薦閱讀 Go 官方博文,GCTT 譯文:Go Modules 的使用方法。

新手學習的時候,對于 GOPATH 和 Go Modules 可能容易搞混,特別是,很多資料,依然是 GOPATH 的,而最新版本的一些 IDE 或編輯器可能默認使用 Modules,這樣很容易出現一些“自己解決不了的問題”。(特別是即將發布的 Go1.13 會默認啟用 Modules)

我們來看一個具體的例子,使用 Goland。(Go 版本:1.12.6)

創建項目 testgopath

如圖,我們使用 GOPATH 模式。

image-20190706231208346.png

之后,創建如下目錄和文件:

image-20190706233136771.png

其中,hello.go 文件代碼如下:

package main

import "fmt"

func demo() {
fmt.Println("This is demo")
}

helloworld.go 文件代碼如下:

package main

import "fmt"

func main() {
fmt.Println("Hello")
demo()
}

(以上目錄和代碼來自球友咨詢的問題)。

如何運行 GOPATH 項目

1)在 helloworld.go 文件右鍵彈出菜單,執行:Run "go build helloworld.go”,結果如下:

# command-line-arguments
src/hello/hellowrold.go:7:2: undefined: demo

Compilation finished with exit code 2

很明顯,無論是 go run 還是 go build ,多個文件的項目,只提供單個文件是不行的。

2)配置運行:go build hello ,采用 Package 的運行方式,很可能結果是:

image-20190707170457999.png

can't load package: package hello: unknown import path "hello": cannot find module providing package hello

3)go build hello,選擇 Directory 的方式,沒有出現錯誤。

image-20190707170620536.png

然而,執行 Run,我這里卻報錯了:

go: cannot find main module; see 'go help modules'

從錯誤提示可知,啟用的是 Go Modules 而不是 GOPATH。原因是我在全局配置了 GO111MODULE=on。實際上,Go1.13 開始,默認也會啟用 Modules,所以這個錯誤會很常見。

知道原因,我們就可以通過配置環境變量,禁用 Modules 來解決:

image-20190707171035598.png

這次運行正常了!

4)如果你在 IDE 下怎么配置運行都不對時,你試試在終端執行。

GOPATH 模式下,對于 go build 來說,只要 GOPATH 正確,go build hello 總是能成功;

上面的規則,在終端驗證成功了,那么我們可以肯定,IDE 不成功的原因是 GOPATH 不對。(一樣要注意 GO111MODULE 這個環境變量的值)

對于 Goland IDE 來說,我們打開 Preferences,在 Go > GOPATH 下,配置 Project GOPATH:

image-20190707171218645.png

這時,我們再回到 Package 的運行模式重試,會發現也正常了。(如果不成功,一樣需要加上 GO111MODULE=off)。

將項目改造為 module

將 GOPATH 項目改造為 module ,推薦閱讀:遷移到 mod 只需 3 個步驟[1]

針對上面的 testgopath,我們執行如下遷移動作:

  • cd /Users/xuxinhua/project/golang/testgopath

  • mv src/* . && rm -rf src

  • go mod init testgopath

  • 這樣,我們已經成功將項目改造為 module 模式了。

    打開 Goland,很可能會發現多了一個 pkg 目錄:

    image-20190707172542398.png

    原因是,module 模式會將依賴和緩存寫入一個 GOPATH 目錄中,一般情況下是全局的 GOPATH(通常是 $HOME/go),因為我們上面為該項目制定了 Project GOPATH,所以出現了 pkg 目錄。我們可以改為 Global GOPATH,同時刪除 pkg 目錄。

    如何運行 module 項目

    和運行 GOPATH 項目一樣,我們使用三種方式運行,go build helloworld.go 的 File 方式肯定不行,我們著重看 Package 和 Directory 方式。

    1)Directory 方式,如下配置:

    一切正常!

    2)Package 方式,如下配置:

    image-20190707174205533.png

    這里說明兩點:

    • Package path:testgopath/hello,也就是需要加上 module 的名字

    • 報錯了,提示找不到包

    雖然報錯,我們強制執行,點擊工具欄 Run,會出現彈窗:

    image-20190707174405827.png

    不管它,依然 Run(Continue Anyway)。會發現運行正常!這說明 Goland 誤報了?

    還記得我們通過 Goland 創建該項目時, 并沒有選擇 Go Modules(vgo) 模式。而且,如果你項目依賴了其他包,會提示各種找不到依賴包的錯誤。這時候,我們只需要將項目配置改為 Go Modules(vgo) 即可。

    https://goproxy.cn 可能是一個更好的選擇
    • 勾選 Enable Go Modules

    • 國內環境下,一般需要配置 Proxy,具體可以參考我之前的文章:Go module 模式下解決“墻”問題[2]

    這樣配置后,發現紅叉沒了,運行一切正常。

    總結

    無論我們使用什么編輯器(IDE),遇到問題時,我們如果知曉原理,都能夠輕松解決掉;如果不知曉原理,通過瞎配置或其他方式碰巧對了,下次遇到其他問題,你依然一臉懵逼。

    因此,知其然并知其所然很重要!GOPATH 和 Go Modules 的環境問題搞明白了嗎?建議按照文章的步驟自己實際試試,加深理解,有問題留言溝通。

    補充:隨著 Modules 成為趨勢,慢慢請忘掉 GOPATH 吧!

    基于 Go1.13 的話,建議執行:go env -w GOPROXY=https://goproxy.cn,direct

    參考資料

    [1]

    遷移到 mod 只需 3 個步驟: https://studygolang.com/articles/17780

    [2]

    Go module 模式下解決“墻”問題: https://studygolang.com/topics/8737

    覺得不錯關注我們,點個贊、轉發吧

    總結

    以上是生活随笔為你收集整理的goland go test 多个文件_这个代码怎么会编译不通过?Goland 新手常见问题解决:GOPATH 和 Go Modules 编译不成功...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。