在GoLand下使用go mod導入自定義包與第三方包時需清除Project GOPATH配置


問題描述: 在學習github的gokit微服務項目過程中,使用GoLand導入項目文件,但配置自定義包和第三方包時,雖能正常go get,且在./pkg/mod/github.com目錄下能找到對應的下載文件,但仍無法import成功;報package xxx is not in GOROOT的錯誤;同時出現 $GOPATH/go.mod exists but should not 的錯誤;go mod init提示outside GOPATH;

1. 項目文件創建

  • 在任意目錄(無需考慮GOPATH的)創建項目文件夾,並在該目錄下創建bin、pkg、src等三個子文件夾
  • 將下載的項目代碼拷貝至src源代碼文件夾,或自行創建相應的go文件
  • *.go程序的import()代碼片段中將報紅的依賴項選中並點擊go get...,執行下載安裝操作
    圖1
  • ./pkg/mod/github.com文件夾中能查獲新下載的第三方軟件包,但是import時仍然報錯,如下圖所示
    在這里插入圖片描述

2. 使用GoModules模式配置依賴項

  • 在File->Setting->Go Modules設置項中,選中enable go modulse integration
    在這里插入圖片描述
  • 打開GoLand的Terminal,在工程的根目錄路徑下輸入go mod init,以初始化項目並生成go.mod文件,此時將會出現如下錯誤:
    在這里插入圖片描述
  • 上述報錯的原因是我們的項目文件不遵循GOPATH路徑,因此需要使用go mod init 項目目錄名進行初始化:
    在這里插入圖片描述
  • 正常執行上述指令后,工程根目錄下將出現go.mod文件

3. 使用GoModules時出現的問題(需清除Project GOPATH配置)

  • 在步驟2中成功創建了go.mod文件,但隨之而來的是另外一個錯誤,如下圖所示:
    在這里插入圖片描述
  • 究其根本,原因是GOPATH與GoModules包管理模式不能並存,只能二選一,因此本例中選擇了GoModules模式,需要完善的操作如下圖所示:
    在這里插入圖片描述
  • 在設置中將Project GOPATH內的路徑配置清除,並使Global GOPATH保持為默認值,重新sync同步之后,即可成功導入第三方包

4. 導入自定義包

  • 在導入自定義包時,若直接使用package對應的包名,則會報錯package xxx is not in GOROOT,如下圖所示:
    在這里插入圖片描述

  • 為此,則需以根目錄開始到包所在目錄的路徑格式進行導入,示例如下:
    在這里插入圖片描述

5. 正常創建並導包后的目錄結構

  • 包含bin pkg src,把代碼存放或創建在src目錄下
  • 在GoModule模式下,無需考慮項目文件夾是否在GOPATH中
    在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM