首頁 > 軟體

golang中包無法引入問題解決

2023-03-17 06:04:58

前言

剛接觸golang不久,有些環境無法融會貫通,現在針對開發過程中遇到的問題做個排查記錄

問題背景

開發環境區分不同網段,同一個程式引入到另一個環境後,對應的包無法下載

問題現象

程式匯入另一個環境後,初始化操作就是下載包:執行go mod tidy後,出現下面錯誤

go: github.com/Sirupsen/logrus@v1.0.1: Get " https://proxy.golang.org/github.com/Sirupsen/logrus/@v/v1.0.1.mod": dial tcp: lookup proxy.golang.org : no such host

或者出現以下錯誤

go: github.com/Sirupsen/logrus@v1.0.1: Get " https://proxy.golang.org/github.com/Sirupsen/logrus/@v/v1.0.1.mod": dial tcp: lookup proxy.golang.org : getaddrinfow: This is usually a temporary error during hostname resolution and means that the local server did not receive a response from an authoritative server

檢視go.mod後,發現很多報紅,無法下載對應的版本包,查閱相關資料,對go.mod有了一個深入瞭解

go.mod檔案定義module路徑以及列出其他需要在build時引入的模組的特定的版本。

module go_start
 
go 1.18
 
require (
    github.com/fsnotify/fsnotify v1.6.0
    github.com/gin-gonic/gin v1.8.1
    github.com/go-sql-driver/mysql v1.6.0
    github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
    github.com/shirou/gopsutil v2.21.11+incompatible
    github.com/spf13/viper v1.14.0
    github.com/valyala/fasthttp v1.40.0
    github.com/vkcom/engine-go v0.0.0-20181122144534-e2cc962e10cc
    github.com/wxnacy/wgo v1.0.4
    go.uber.org/zap v1.23.0
    gopkg.in/yaml.v3 v3.0.1
)

如上go.mod檔案:宣告go_start路徑作為module的根目錄;go的執行版本為1.18;同時也宣告了module依賴特定版本的github.com/fsnotify/fsnotify v1.6.0和github.com/gin-gonic/gin v1.8.1等等

問題解決

根據報錯,嘗試舉措如下

1、強制開啟GO111MODULE

go env -w GO111MODULE=on

GO111MODULE開啟和關閉對Go的包無論是匯入,還是下載使用,都有著非常大的區別,老版本可以說就沒有包管理器,無法實現類似npm install或者pip install -r requirements這樣的自動匯入所有需要的包。並且go專案也被限制在了go的PATH資料夾中,匯入也需要寫較長的路徑,十分不方便。GO111MODULE的出現就是用來解決上述所有的問題。

2、切換代理

查詢了一下當前環境的GOPROXY地址:

go env GOPROXY
> http://另一個網段網路:埠/倉庫地址/,direct

執行命令:

go env -w GOPROXY=http://另一個網段網路:埠/倉庫地址/,direct

重新執行命令go mod tidy,完美通過!

問題總結

切換另一個環境時,原來環境變數的GOPROXY被刪除了,導致引入的程式無法下載對應的包,所以重新設定GOPROXY即可

到此這篇關於golang中包無法引入問題解決的文章就介紹到這了,更多相關golang 包無法引入內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com