Golang 入門 : 配置代理

2022-01-06 51reboot運維開發

由於一些客觀原因的存在,我們開發 Golang 項目的過程總會碰到無法下載某些依賴包的問題。這不是一個小問題,因為你的工作會被打斷,即便你使用各種神通解決了問題,很可能這時你的線程已經切換到其他的事情上了(痛恨思路被打斷!)。所以最好是一開始我們就重視這個問題,並一勞永逸的解決它。

當我們使用 go get、go install、go mod 等命令時,類似於 golang.org/x/... 的包會是無法下載的。比如通過下面的命令下載 sys 包:

$ go get -u golang.org/x/sys

下載肯定會失敗:

如果你有自己的代理伺服器,那就很容易了,這也是一勞永逸的方法。直接設置環境變量 http_proxy 和 https_proxy 就行了:

export http_proxy=http:export https_proxy=http:

比如筆者在區域網中共享了代理 192.168.21.1:1080:

$ export http_proxy=http:$ export https_proxy=http:

然後執行下面的命令後就能夠下載了:

$ go get -u golang.org/x/sys


如果一時找不到合適的代理,還可以臨時通過手動的方式下載包。我們常見的 golang.org/x/... 包,一般在 GitHub 上都有官方的鏡像倉庫對應。比如 zieckey/golang.org 就是作為 golang.org/x 的鏡像庫存在的。我們可以手動下載或 clone 對應的 GitHub 倉庫到指定的目錄下,比如從 zieckey/golang.org 下載 x 目錄下的所有包。或者是每次只下載單個的庫,下面的示例演示如何下載 text 庫:

$ mkdir $GOPATH/src/golang.org/x$ cd $GOPATH/src/golang.org/x$ git clone git@github.com:golang/text.git

當如果需要指定版本的時候,該方法就無解了,因為 GitHub 上的鏡像倉庫多數都沒有 tag。


從 Go 1.11 版本開始,新增支持了 go modules 用於解決包依賴管理問題。該工具提供了 replace,就是為了解決包的別名問題,也能替我們解決 golang.org/x 無法下載的的問題。

go module 被集成到原生的 go mod 命令中,但是如果你的代碼庫在 $GOPATH 中,module 功能是默認不會開啟的,想要開啟也非常簡單,通過一個環境變量即可開啟 export GO111MODULE=on。比如下面的示例,在go.mod中指定下面的代碼:

module example.com/demo
require ( golang.org/x/text v0.3.0)
replace ( golang.org/x/text => github.com/golang/text v0.3.0)

從 Go 1.11 版本開始,官方支持了 go module 包依賴管理工具。其實還新增了 GOPROXY 環境變量。如果設置了該變量,下載原始碼時將會通過這個環境變量設置的代理地址,而不再是以前的直接從代碼庫下載。比如我們可以指定自己的代理地址。

更可喜的是,goproxy.io 這個開源項目幫我們實現好了我們想要的。該項目允許開發者一鍵構建自己的 GOPROXY 代理服務。同時,也提供了公用的代理服務 https://goproxy.io,我們只需設置該環境變量即可正常下載被牆的源碼包了:

export GO111MODULE=onexport GOPROXY=https:

也可以通過置空這個環境變量來關閉,export GOPROXY=。

對於 Windows 用戶,可以在 PowerShell 中設置:

$env:GOPROXY = "https://goproxy.io"

最後,我們當然推薦使用 GOPROXY 這個環境變量的解決方式,前提是 Go version >= 1.11。

下載 golang.org/x/sys 包:

$ go get -u golang.org/x/sys

下載到的包在 $GPATH/pkg/mod/golang.org/x/

出處:http://u6.gg/sr99j

Python 運維開發班

Golang 班

來了解一下,開啟學習

相關焦點

  • golang mod 入門
    golang 提供了 go mod命令來管理包。/x/crypto/acme/autocert latestgo: finding golang.org/x/crypto/acme latestgo: finding golang.org/x/crypto latestbuild command-line-arguments: cannot find module for path _/home/gs/helloworld
  • Golang入門教程——map篇
    今天是golang專題的第7篇文章,我們來聊聊golang當中map的用法。map這個數據結構我們經常使用,存儲的是key-value的鍵值對。在C++/java當中叫做map,在Python中叫做dict。
  • Golang入門教程——面向對象篇
    今天是golang專題的第9篇文章,我們一起來看看golang當中的面向對象的部分。在現在高級語言當中,面向對象幾乎是不可或缺也是一門語言最重要的部分之一。golang作為一門剛剛誕生十年的新興語言自然是支持面向對象的,但是golang當中面向對象的概念和特性與我們之前熟悉的大部分語言都不盡相同。比如Java、Python等,相比之下, golang這個部分的設計非常得簡潔和優雅(仁者見仁),所以即使你之前沒有系統地了解過面向對象,也沒有關係,也一定能夠看懂。
  • Golang入門教程——基本操作篇
    但是在golang當中支持同時返回多個結果,這將會極大地方便我們的編碼。在golang的設計中設想當中,只需要一種循環,就可以實現所有的功能。從某種程度上來說,也的確如此,golang中的循環有點像是C++和Python循環的結合體,集合兩種所長。首先,我們先來看下for循環的語法,在for循環當中,我們使用分號分開循環條件。
  • golang標準庫log
    }結果示例(實際結果不是這樣的哦,因為panic,fatal會影響程序的執行):2021/11/29 16:45:59 my log2021/11/29 16:45:59 my log發生了 panic錯誤!panic: 致命錯誤!
  • golang 打包到docker運行最小鏡像
    1.在 https://hub.docker.com/ 中 搜索 golang ,Dockerfile 中 依賴 golang 鏡像 (大概100M左右)所以需要依賴 golang sdk 進行編譯FROM golang:alpine WORKDIR $GOPATH/src/gin_dockerADD . .
  • golang 編程風格最佳實踐
    /doc/effective_go.htmluber golang 代碼規範 https://github.com/uber-go/guideuber golang 代碼規範中文 https://github.com/xxjwxc/uber_go_guide_cn代碼目錄規範
  • Golang 入門 : 結構體(struct)
    所以學習並掌握結構體是入門 Golang 的關鍵步驟。希望本文能夠幫助大家理解 Golang 結構體的基本概念和用法。參考:Golang Struct types《Go語言編程入門與實戰技巧》結構體定義go 語言的變量聲明並賦值運算符(:=)出處:http://u6.gg/sxLmBPython 運維開發——18天訓練營
  • 構建微服務的十大 Golang 框架和庫
    我使用這個庫來管理命令應用程式,執行 runner 應用程式,初始化配置,並啟動 Rest API。Viper 是一個完整的 Go 應用配置解決方案。Viper 可以讀取以下內容:JSONTOMLYAMLHCLINIenvfile 以及Java 屬性配置文件示例 config/config.toml :address="localhost"port="9090"讀取 config.go
  • Golang 多版本管理
    # 記得重啟 shell ,或者重新 source 配置第二種,則是調整 ~/.oh-my-zsh/plugins/git/git.plugin.zsh 中關於 g 的註冊,將其注釋或刪除掉:# alias g='git'
  • Go語言(Golang)環境搭建詳解
    最近寫了很多Go語言的原創文章,其中Go語言實戰系列30篇,近15W字,還有最近更新的Go經典庫系列,不過通過大家的諮詢來看,還是想要一些入門的知識,這一篇文章寫於2017年初,這裡再更新一下,發給大家。
  • Proxy-Go v3.7 發布,緊急修復socks代理問題,建議升級
    Proxy是golang實現的高性能http,https,websocket,tcp,udp,socks5代理伺服器,支持正向代理、內網穿透、SSH中轉。 更新內容: 特點: 鏈式代理,程序本身可以作為一級代理,如果設置了上級代理那麼可以作為二級代理,乃至N級代理.
  • Golang開源項目推薦(持續更新)
    項目地址:https://github.com/coderit666/G適合學習者:這個開源項目比較適合小白入門學習二、LeetCode-Goimage-20211117210349288五、7days-golang7天從零開始的golang程序(web框架Gee、分布式緩存GeeCache、對象關係映射ORM框架GeeORM、rpc框架GeeRPC等)7天用系列Go開始寫
  • Proxy-Go v3.3 發布,socks 新增 UDP 支持並增強代理穩定性
    Proxy是golang實現的高性能http,https,websocket,tcp,udp,socks5代理伺服器,支持正向代理、內網穿透、SSH中轉。更新內容:修復了socks代理模式對證書文件的判斷邏輯.增強了http代理,socks代理的ssh中轉模式的穩定性.
  • Golang並發模型:輕鬆入門select
    select在Golang並發中扮演著重要的角色,如果你已經入門了select可以跳過這篇文章,關注下一篇文章「select進階」。
  • 《8小時轉職Golang工程師》
    置頂 本視頻偏入門級,主要是針對後端想快速低成本掌握golang開發人群學習,如您已經掌握golang請繞行。
  • Golang 在即刻後端的實踐
    │ │ ├── internal: 具體業務代碼一律放在 internal 內,防止被其他服務引用│ │ │ ├── config│ │ │ ├── controller│ │ │ ├── service│ │ │ └── dao│ │ └── Dockerfile│ ├── user: 大業務拆分多個子服務示例│ │ ├─
  • 從0開始學Golang編程-環境安裝
    首先,在開始之前,我們需要安裝兩個東西:1:Golang https://golang.google.cn/dl/;2: Vs Code https://code.visualstudio.com/我們去Golang官網下載Goalng所需的運行環境,下載完成後,直接雙擊即可安裝完成後,在cmd命令行執行go version
  • golang之context使用
    背景golang中並發編程的三種實現方式:chan管道、waitGroup和Context。本篇將重點介紹context的使用,告訴大家基本的使用方式,做到會用。Context概念介紹context譯為上下文,golang在1.6.2的時候還沒有自己的context,在1.7的版本中就把golang.org/x/net/context包被加入到了官方的庫中。golang 的 Context包,是專門用來處理多個goroutine之間與請求域的數據、取消信號、截止時間等相關操作。
  • Nginx反向代理配置
    target { proxy_pass http://127.0.0.1:8085/; } }當請求http://localhost/target 請求將跳轉到http://127.0.0.1:8085/二、location指令說明location [=|~|~*|^~] /uri/ { … }