您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關當go get遇到墻時該怎么辦,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
作為一名從py轉向go語言的新手,在使用第三方包的時候我們需要比較熟悉該包或者模塊的構建與安裝,好比在使用pip
或者easy_install
之類的工具安裝模塊時經常會遇到底層庫或者工具包的依賴再或者網絡超時而導致模塊安裝失敗。然而在使用go的過程中,雖然不必像py那樣為一個復雜模塊去解決各種的依賴關系,但在使用go get
的過程中也不一定一帆風順,比如你去下載golang.org
上的包時,對不起,一般肯定是會被墻掉的。
&^*(^*%^&*)&*^&*%$%$^&*(*()&*^&%^&()**(%$%&*((^%%^*(*)*)
總之,由于某某原因,它和它家的主人google都被墻掉了。
兩種方式:第一種無非就是使用vpn技術啦,然后再在本地配個代理啥的,不過既然都是開源的東西,就一定能夠從github上面clone下來。所以第二種方式就是就是去從github上面直接clone下來,然后搞成go可以識別的包就可以啦github.com現在肯定是不會被墻啦
。 vpn的方式就是搭了個梯子然后配置下代理就可以直接使用go get
了,這里主要講一下第二種方式去安裝第三方包。
假設我想使用go語言的docker客戶端去封裝改造一些東西,通過go get -v
可以查看到安裝package的詳情
$go get -v github.com/fsouza/go-dockerclient package golang.org/x/net/html: unrecognized import path "golang.org/x/net/html" (https fetch: Get https://golang.org/x/net/html?go-get=1: dial tcp 216.239.37.1:443: i/o timeout) package golang.org/x/net/html/atom: unrecognized import path "golang.org/x/net/html/atom" (https fetch: Get https://golang.org/x/net/html/atom?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
由以上提示可以大概猜得到,本地服務器肯定是無法訪問golang.org的,因此在下載golang.org相關的包的時候無法下載導致dockerclient下載失敗。
由于go get
其實是將package下載下來,然后進行本地安裝的,因此我們也可以講golang.org的相關包clone到本地然后再進行安裝。
主要的就是GOPATH和GOROOT
# go env GOARCH="amd64" GOBIN="" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux" GOPATH="/export/test-go" GORACE="" GOROOT="/export/go" GOTOOLDIR="/export/go/pkg/tool/linux_amd64" GO15VENDOREXPERIMENT="1" CC="gcc" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0" CXX="g++" CGO_ENABLED="1"
注意:所有下載的包都會默認放在GOPATH,因此這個目錄是必須的,且一般包含src pkg bin三個目錄,分別存放源碼包,編譯包以及可執行文件
為了使包的導入方式不變,我們需要在src目錄下面構造目錄結構
$mkdir -p $GOPATH/src/golang.org/x/ $cd $GOPATH/src/golang.org/x/ $git clone https://github.com/golang/net.git net $go install net
執行go install之后沒有提示,就說明安裝好了。
# go get -v github.com/fsouza/go-dockerclient github.com/fsouza/go-dockerclient (download) github.com/docker/docker (download) github.com/docker/go-units (download) github.com/hashicorp/go-cleanhttp (download) github.com/docker/docker/api/types/network github.com/docker/docker/pkg/promise github.com/docker/docker/api/types/blkiodev github.com/docker/docker/api/types/mount github.com/docker/docker/api/types/strslice github.com/docker/docker/vendor/github.com/docker/go-connections/nat github.com/docker/docker/vendor/github.com/docker/go-units github.com/docker/docker/api/types/versions github.com/docker/docker/api/types/registry github.com/docker/docker/vendor/github.com/Sirupsen/logrus github.com/docker/docker/vendor/github.com/opencontainers/runc/libcontainer/user github.com/docker/docker/vendor/golang.org/x/net/context github.com/docker/docker/vendor/github.com/opencontainers/runc/libcontainer/system github.com/docker/docker/vendor/github.com/Nvveen/Gotty github.com/docker/docker/pkg/jsonlog github.com/docker/docker/pkg/term github.com/docker/docker/pkg/stdcopy github.com/docker/go-units github.com/hashicorp/go-cleanhttp golang.org/x/net/context github.com/docker/docker/api/types/filters github.com/docker/docker/pkg/system github.com/docker/docker/pkg/ioutils golang.org/x/net/context/ctxhttp github.com/docker/docker/api/types/container github.com/docker/docker/pkg/idtools github.com/docker/docker/api/types/swarm github.com/docker/docker/pkg/fileutils github.com/docker/docker/pkg/pools github.com/docker/docker/api/types github.com/docker/docker/pkg/homedir github.com/docker/docker/pkg/jsonmessage github.com/docker/docker/pkg/archive github.com/docker/docker/opts github.com/fsouza/go-dockerclient
使用-v參數可以查看該包關聯的所有包,可以看到已經成功安裝
github.com/fsouza/go-dockerclient
示例:查看當前docker主機上所下載的images
#cat JFdocker.go package main import ( "fmt" "github.com/fsouza/go-dockerclient" "strings" ) func main() { //定義一個socker文件路徑 endpoint := "unix://var/run/docker.sock" //創建一個docker客戶端鏈接 client, err := docker.NewClient(endpoint) //判斷是否異常,并且捕獲 if err != nil { panic(err) } //使用創建的client進行listimages操作 images, err := client.ListImages(docker.ListImagesOptions{All: false}) if err != nil { panic(err) } //使用range迭代所有images信息 for _, img := range images { fmt.Printf("ID:%v\tTag:%v\t\t Size:%v\t\t VSize:%v\n", //image.ID為一個string類型并且以sha215:開頭 strings.Split('strings','split')可以將結果分割并且存放在slice中 strings.Split(img.ID, ":")[1][:12], img.RepoTags, img.Size, img.VirtualSize) } } 編譯并執行程序: #go build JFDocker.go sh-4.2# ./JFDocker ID:e740f4a4a24d Tag:[centos6.8-test-app:v2] Size:2411566940 VSize:2411566940 ID:d5cb0af109de Tag:[centos6.8-test-app:latest] Size:2408322269 VSize:2408322269 ID:67591570dd29 Tag:[centos:latest] Size:191839169 VSize:191839169
可以看到,現在就可以成功的使用go的docker client進行開發程序了。至此,我們已經成功的解決了go get 無法安裝golang.org相關的包了。
看完上述內容,你們對當go get遇到墻時該怎么辦有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。