У меня очень медленная нестабильная сеть.
Первое наблюдение, запущенное локально
Например, когда я запускаю go get -u github.com/jinzhu/gorm
в новой директории модуля (в которой есть main.go).Он распечатывает много строк и никогда не сможет успешно завершиться в моей локальной среде из-за медленной нестабильной сети.
Но если я выполню ту же команду за пределами каталога модуля, она может быть выполнена за разумное время без какого-либо стандартного вывода.
Второе наблюдение, запущенное удаленно
У меня есть пультVPS сервер, который находится в США.Я создаю там тот же каталог модулей и запускаю ту же команду внутри модуля на удаленном компьютере: go get -u github.com/jinzhu/gorm
, и go.mod
будет иметь следующее содержимое:
require (
cloud.google.com/go v0.39.0 // indirect
github.com/denisenkom/go-mssqldb v0.0.0-20190515213511-eb9f6a1743f3 // indirect
github.com/golang/mock v1.3.1 // indirect
github.com/google/btree v1.0.0 // indirect
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f // indirect
github.com/jinzhu/gorm v1.9.8 // indirect
github.com/jinzhu/inflection v0.0.0-20190603042836-f5c5f50e6090 // indirect
github.com/kr/pty v1.1.4 // indirect
github.com/lib/pq v1.1.1 // indirect
go.opencensus.io v0.22.0 // indirect
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5 // indirect
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522 // indirect
golang.org/x/image v0.0.0-20190523035834-f03afa92d3ff // indirect
golang.org/x/lint v0.0.0-20190409202823-959b441ac422 // indirect
golang.org/x/mobile v0.0.0-20190509164839-32b2708ab171 // indirect
golang.org/x/mod v0.1.0 // indirect
golang.org/x/net v0.0.0-20190603091049-60506f45cf65 // indirect
golang.org/x/oauth2 v0.0.0-20190523182746-aaccbc9213b0 // indirect
golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed // indirect
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect
golang.org/x/tools v0.0.0-20190603152906-08e0b306e832 // indirect
google.golang.org/appengine v1.6.0 // indirect
google.golang.org/genproto v0.0.0-20190530194941-fb225487d101 // indirect
google.golang.org/grpc v1.21.0 // indirect
honnef.co/go/tools v0.0.0-20190602125119-5a4a2f4a438d // indirect
)
, а затем я запускаю go mod tidy
,go.mod
становится:
require (
cloud.google.com/go v0.39.0 // indirect
github.com/denisenkom/go-mssqldb v0.0.0-20190515213511-eb9f6a1743f3 // indirect
github.com/google/go-cmp v0.3.0 // indirect
github.com/jinzhu/gorm v1.9.8
github.com/jinzhu/inflection v0.0.0-20190603042836-f5c5f50e6090 // indirect
github.com/lib/pq v1.1.1 // indirect
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5 // indirect
google.golang.org/appengine v1.6.0 // indirect
)
Но если я полностью удаляю секцию require(...)
из go.mod
и затем выполняю go mod tidy
, я получаю следующее содержимое в go.mod
:
require github.com/jinzhu/gorm v1.9.8
Требуется только один.И с этой одной строкой я запускаю go build
, модуль может быть собран и успешно запущен без каких-либо проблем.
Так что я очень озадачен тем, что на самом деле go get -u
делает в моем каталоге модулей.
Мои два вопроса:
Должен ли я запустить go get -u
в каталоге модуля или я могу просто запустить его вне каталога модуля?
Почему go get -u
вне каталога модуля можно легко завершить?Доза ли она делает то же самое скачивание / обновление по сравнению с запуском внутри каталога модуля?
Я использую последнюю стабильную версию golang go1.12.5.Потому что go get -u
звонит git
и git
звонит curl
, но curl
очень плохо в нестабильной сети (по сравнению с wget
).Я не могу заполнить go get -u
внутри каталога модуля.Я получу много error: RPC failed; The remote end hung up unexpectedly; fatal: early EOF; fatal: index-pack failed;
.Я не знаю, есть ли решение этой проблемы или нет.Но я могу использовать go get -u
вне каталога модуля.
Большое спасибо.
(Кстати, если go get может использовать wget, он будет работать в моей локальной среде. У меня никогда не было проблем с wget, и wget наконец завершит загрузку после ожиданияв течение долгого времени. Но, к сожалению, wget не является предпочтительным инструментом в мире разработки)