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

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

如何配置 goland 以識別“mod”包?

如何配置 goland 以識別“mod”包?

Go
MMMHUHU 2023-03-21 16:02:31
我正在試用 go1.11rc1,我注意到的第一件事是 goland 不識別導入。goland版本公告說:“開箱即用地支持 Go 模塊(以前稱為 vgo)”有人知道怎么修這個東西嗎?問題:像“github.com/urfave/cli”這樣的包顏色為紅色,懸停文本顯示:“無法解析目錄...”導入的包項目,如“app := cli.NewApp()”中的“NewApp”,顏色為紅色,懸停文本顯示:“未解決的參考......”重現步驟:安裝go1.11rc1:刪除當前安裝,安裝1.11rc1,檢查版本。在go路徑外新建一個項目目錄:mkdir pjg && cd pjg創建一個go.mod文件:go mod init github.com/stevetarver/pjg向項目中添加一個包:go get github.com/urfave/cligo.mod文件現在看起來像:module github.com/stevetarver/pjg/v1 require github.com/urfave/cli v1.20.0 // indirect創建main.go:package mainimport (    "fmt"    "log"    "os"    "github.com/urfave/cli")func main() {    app := cli.NewApp()    app.Name = "boom"    app.Usage = "make an explosive entrance"    app.Action = func(c *cli.Context) error {        fmt.Println("boom! I say!")        return nil    }    err := app.Run(os.Args)    if err != nil {        log.Fatal(err)    }}在 goland 中查看main.go,并將鼠標懸停在紅色文本上以查看問題。mod包存儲在$GOPATH/pkg/mod/戈蘭版本:2018.2.1去版本:go1.11rc1 darwin/amd64筆記:$GOPATH設置正確 -go get將包放在正確的位置,env 中的 GOPATH 匹配 goland 首選項。將 goland 首選項設置為 Go -> GOPATH -> Module GOPATH 并/Users/starver/code/go/pkg/mod沒有解決這個問題。
查看完整描述

5 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

這個網站上的答案對我有用?;旧?,通過以下方式在 GoLand 中啟用 go 模塊:

確保在設置中啟用了 Go Modules 集成(Preferences / Settings | Go | Go Modules),并且禁用了 GOPATH 索引(Preferences / Settings | Go | GOPATH | Index entire GOPATH)。

我一這樣做,紅色進口就消失了,一切正常。


查看完整回答
反對 回復 2023-03-21
?
慕斯王

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

GoLand 支持

最新版本的 GoLand 實現了對 vgo 和 go 模塊的支持,但還沒有趕上 go1.11rc1 的語法變化。以防萬一它在過渡期間對某人有所幫助,我將記錄我嘗試過的事情以及他們的問題和成功。

TL;DR:不要將您的項目放入其中$GOPATH并將新項目創建為“Go Module (vgo)”類型,或者為現有項目打開該設置。

將 go1.11rc1 安裝為 global 后go,GoLand 中的項目有三個基本用例go mod......

在里面 創建一個新項目$GOPATH

  1. 創建一個類型為“Go Module (vgo)”的新項目:File -> New,選擇“Go Module (vgo)”

  2. 將您的項目目錄設置為內部的內容$GOPATH$GOPATH/src/github.com/stevetarver/insidegopath

  3. 創建您的main.go文件,引用您的$GOPATH.

  4. 將該包添加到您的導入中。

使用此處gif 中所述的go getGoLand 方式:vgo

  1. 點擊導入包。

  2. 單擊紅色檢查燈泡。

  3. 單擊“同步包...”。

  4. 失敗go: go mod -sync is now go mod tidy

使用go getGoLand嵌入式終端方式:

  1. 打開嵌入式終端。

  2. go get你的進口。

  3. 失敗: ? go get github.com/urfave/cli go get: warning: modules disabled by GO111MODULE=auto in GOPATH/src;    ignoring go.mod;    see 'go help modules'

讓我們打開該變量并重試:

  1. 注意:終端插件首選項無法設置環境變量。

  2. 設置GO111MODULE=on:打開 Preferences -> Appearance & Behavior -> Path Variables,添加GO111MODULE=on.

  3. 退出終端,重試,重啟GoLand,重試,同上失敗。

  4. env | grep GO111MODULE在終端中什么也不產生。

  5. 注意:如果這行得通,那將是一個糟糕的解決方案——GoLand 似乎沒有為此設置每個項目——該變量會為所有項目打開,這會破壞那些尚未準備好的項目去模塊。

  6. 根據這個答案,您可以創建一個自定義命令行啟動器以包含此環境變量,但是 eeuuwww - 您將如何跟蹤何時正常啟動 GoLand 以及何時使用命令行啟動器?

您可以GO111MODULE=on在 shell 初始化腳本中進行設置,但這會破壞所有尚未使用 go 模塊的項目。

您還可以在每個 go 命令前加上 env var:export GO111MODULE=on; go get github.com/urfave/cli或在您的項目目錄中創建一個goshell 腳本包裝器來為您執行此操作。

這些都不是真正可行的解決方案,但 go 模塊的一部分要點是逃離可怕的 go 工作區,所以繼續閱讀,它會變得更好

在外部 創建一個新項目$GOPATH

  1. 創建一個類型為“Go Module (vgo)”的新項目:File -> New,選擇“Go Module (vgo)”

  2. 將您的項目目錄設置為外部目錄$GOPATH

  3. 修復你的go.mod:生成的文件包含module "outsidegopath",但我們想要類似的東西module github.com/stevetarver/outsidegopath。這有點靠不住——GoLand 將嘗試重寫go.mod和刪除部分路徑。重復幾次,它將停止嘗試。

  4. 創建您的main.go文件。如果您通過 ide 創建它作為一個 go 文件,它將包含package outsidegopath. 修復它是package main。

  5. 現在您可以了go get github.com/urfave/cli,它已按$GOPATH/pkg/mod預期提取。

添加對現有新go mod項目的支持:

結果證明這非常簡單——在 GoLand 中使用 go 模塊的最佳方式:

  1. 打開首選項:Go -> Go Module (vgo),勾選“Enable Go Modules (vgo) integration”

  2. 如上所述工作 - 但您可以go.mod使用go mod init module-name.


查看完整回答
反對 回復 2023-03-21
?
UYOU

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

在goland的設置中,勾選go module integration解決了我的pro。



查看完整回答
反對 回復 2023-03-21
?
www說

TA貢獻1775條經驗 獲得超8個贊

Go 1.13(2019 年 8 月)的模塊管理應該更容易:

環境GO111MODULE變量繼續默認為auto,但現在只要當前工作目錄包含文件或在包含文件的目錄下,該auto設置就會激活命令的模塊感知模式——即使當前目錄在.gogo.modGOPATH/src

此更改簡化了內部現有代碼的遷移GOPATH/src以及模塊感知包與非模塊感知導入器的持續維護。

$GOPATH這意味著將不再需要所有“不要將項目放入其中”部分。
只要有一個go.mod文件,模塊就會被識別,從命令行或像 Goland 這樣的 IDE。


查看完整回答
反對 回復 2023-03-21
?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

我嘗試了下面的方法,它解決了問題。Main Menu > File (Menu) > Invalidate Caches .... 選中 Invalidate 和 Restart 的所有復選框。重啟后讓它同步,問題應該解決了。



查看完整回答
反對 回復 2023-03-21
  • 5 回答
  • 0 關注
  • 284 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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