Penerangan masalah
Apabila kami menggunakan go get
, go install
, go mod
, dsb. Apabila melaksanakan arahan, pakej yang sepadan atau pakej bergantung akan dimuat turun secara automatik. Walau bagaimanapun, atas sebab yang diketahui, pakej yang serupa dengan golang.org/x/...
akan gagal dimuat turun. Seperti yang ditunjukkan di bawah:
$ go get -u golang.org/x/sys go get golang.org/x/sys: unrecognized import path "golang.org/x/sys" (https fetch: Get https://golang.org/x/sys?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
Penyelesaian
Jadi bagaimana kita hendak menyelesaikan masalah tersebut? Lagipun, kami masih perlu mencipta pepijat~
Muat turun secara manual
pakej golang.org/x/...
biasa kami, yang biasanya mempunyai repositori cermin rasmi di GitHub. Contohnya, golang.org/x/text
sepadan dengan github.com/golang/text
. Oleh itu, kami boleh memuat turun atau mengklon repositori GitHub yang sepadan secara manual ke direktori yang ditentukan.
mkdir $GOPATH/src/golang.org/x cd $GOPATH/src/golang.org/x git clone git@github.com:golang/text.git rm -rf text/.git
Apabila anda perlu menentukan versi, kaedah ini tidak mempunyai penyelesaian, kerana kebanyakan gudang cermin di GitHub tidak mempunyai teg. Selain itu, bagaimana pengaturcara boleh melakukannya secara manual, terutamanya kerana terdapat terlalu banyak kebergantungan.
Tetapkan proksi
Jika anda mempunyai proksi, anda boleh menetapkan pembolehubah persekitaran yang sepadan:
export http_proxy=http://proxyAddress:port export https_proxy=http://proxyAddress:port
Atau, gunakan all_proxy
terus :
export all_proxy=http://proxyAddress:port
go mod replace
Bermula dari versi Go 1.11, sokongan baharu untuk go modules
digunakan untuk menyelesaikan isu pengurusan pergantungan pakej. Alat ini menyediakan replace
untuk menyelesaikan masalah alias pakej Ia juga boleh menyelesaikan masalah yang golang.org/x
tidak boleh dimuat turun untuk kami.
go module
disepadukan ke dalam perintah go mod
asli, tetapi jika pangkalan kod anda berada dalam $GOPATH
, fungsi module
tidak akan didayakan secara lalai, dan sangat mudah untuk mendayakannya . Ia boleh didayakan melalui pembolehubah persekitaran export GO111MODULE=on
.
Berikut ialah contoh rujukan:
module example.com/hello require ( golang.org/x/text v0.3.0 ) replace ( golang.org/x/text => github.com/golang/text v0.3.0 )
Begitu juga, terdapat alatan pengurusan pakej pihak ketiga seperti glide dan gopm, yang memberikan kami penyelesaian yang berbeza.
Pembolehubah persekitaran GOPROXY
Akhirnya kami telah mencapai pembunuh utama artikel ini - GOPROXY.
Kami tahu bahawa bermula daripada versi Go 1.11
, alat pengurusan pergantungan pakej go module
disokong secara rasmi.
Malah, pembolehubah persekitaran GOPROXY
baharu telah ditambah. Jika pembolehubah ini ditetapkan, kod sumber akan dimuat turun melalui alamat proksi yang ditetapkan oleh pembolehubah persekitaran ini, bukannya memuat turun terus daripada pustaka kod seperti sebelum ini. Ini sudah pasti berita baik terbesar untuk pembangun seperti kami yang tidak dapat mengakses Internet secara saintifik.
Apa yang lebih menggembirakan ialah projek sumber terbuka goproxy.io membantu kami mencapai apa yang kami mahukan. Projek ini membolehkan pembangun membina perkhidmatan proksi GOPROXY
mereka sendiri dengan satu klik. Pada masa yang sama, perkhidmatan proksi awam https://goproxy.io
juga disediakan Kami hanya perlu menetapkan pembolehubah persekitaran ini untuk memuat turun pakej kod sumber yang disekat seperti biasa:
export GOPROXY=https://goproxy.io
Walau bagaimanapun, perlu bergantung. pada go module
Ciri . MODUL boleh dibuka melalui export GO111MODULE=on
.
Jika projek tiada dalam GOPATH
, anda tidak boleh menggunakan go get ...
, tetapi anda boleh menggunakan go mod ...
arahan berkaitan.
juga boleh dimatikan dengan menetapkan kosong pembolehubah persekitaran ini, export GOPROXY=
.
Untuk pengguna Windows, anda boleh menetapkannya dalam PowerShell
:
$env:GOPROXY = "https://goproxy.io"
Akhir sekali, kami pasti mengesyorkan menggunakan GOPROXY
penyelesaian pembolehubah persekitaran, dengan syarat versi Go > ;= 1.11.
Akhir sekali, Qiniu juga telah melancarkan proksi domestik goproxy.cn untuk memudahkan pengguna domestik mengakses pakej yang tidak boleh diakses dengan lebih pantas, yang benar-benar merupakan hati nurani.