«Нераспознанный путь импорта» с go get

93

Я пытаюсь установить web.go, но бег go get github.com/hoisie/webвозвращает

package bufio: unrecognized import path "bufio"
package bytes: unrecognized import path "bytes"
package crypto/rand: unrecognized import path "crypto/rand"
package crypto/sha1: unrecognized import path "crypto/sha1"
package crypto/tls: unrecognized import path "crypto/tls"
package encoding/base64: unrecognized import path "encoding/base64"
package encoding/binary: unrecognized import path "encoding/binary"
package encoding/json: unrecognized import path "encoding/json"
package errors: unrecognized import path "errors"
package fmt: unrecognized import path "fmt"

и это продолжается некоторое время с различными пакетами, прежде чем ничего больше не возвращается. go envдает мне:

GOARCH="amd64"
GOBIN="/usr/local/go/bin"
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/home/me/go"
GOTOOLDIR="/home/me/go/pkg/tool/linux_amd64"
TERM="dumb"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CXX="g++"
CGO_ENABLED="1"

Как мне установить web.go? Использование go get(а не go install) - это то, что есть в README на странице github. Моя версия Go есть go version go1.2 linux/amd64.

q3d
источник
3
Экспортировал GOROOT, но не GOPATH? ГОРОТ отличается от ГОБИНА? Как вы установили Go? Как вы настроили свою среду?
Volker
Я установил go, перейдя на страницу golang.org/doc/install . Я не знала, что поставить для GOPATH.
q3d

Ответы:

102

Проблемы связаны с инвалидом GOROOT.

Думаю, вы установили Go in /usr/local/go.
Так что измените свой GOROOTпуть на значение /usr/local/go/bin.

Похоже, вы хотели разместить свое рабочее пространство (GOPATH) по адресу /home/me/go.

Это может решить вашу проблему.
Добавьте это в конец вашего профиля bash, расположенный здесь =>$HOME/.profile

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin

Обязательно удалите старые ссылки на GOROOT.

Затем попробуйте снова установить web.go.

Если это не сработает, попросите Ubuntu установить Go за вас.

sudo apt-get install golang

Видеоурок: http://www.youtube.com/watch?v=2PATwIfO5ag

Ларри Батл
источник
16
Практически никогда не следует устанавливать GOROOT. Ваше объявление PATH не попадает в / usr / local / go / bin. Также следует отметить, что пакеты ubuntu немного отстают от официального выпуска, то есть 1.2.
JimB
2
Когда я следовал инструкциям по установке с официального сайта (установка из tar-файла в / usr / local), я получал указанную выше ошибку, пока не изменил GOROOT, как указано выше.
Дрю
1
Только что установил свежий golang 1.3 на Fedora 20 и go getвыдает ту же ошибку. GOROOTустановлен на /usr, иди сам установлен в / usr, а не в / usr / local. Установите GOPATHна $HOME/go. Есть идеи, что еще проверить?
Dfr
15
Отвечая себе: отключение, GOROOTкажется, решило проблему.
Dfr
5
+1 за то, что не установил GOROOT. Я отключил его, убедился, что он не установлен, а echo $GOROOTзатем проверил, что GO все еще имеет его в окружении, с go envкоторым он работал, и он был /usr/local/goтам, где я был установлен (поэтому нет необходимости устанавливать его в любом случае)
StartupGuy
37

Я установил Go with brewна OSX 10.11 и обнаружил, что мне нужно установить GOROOT:

/usr/local/Cellar/go/1.5.1/libexec

(Конечно, замените версию в этом пути имеющейся у вас версией go)

Brew использует символические ссылки, которые обманывают gotool. Так что переходите по ссылкам домой.

Эрик
источник
Ах, наконец, я нашел кое-что, что работало. Спасибо, Эрик!
Мир Аднан
Полезно, спасибо ~
Као-Юань Линь
23

У меня была точно такая же проблема после перехода от старой версии go (установленной из старого PPA) к более новым (1.2.1) пакетам по умолчанию в ubuntu 14.04.

Первым шагом была очистка существующего го:

sudo apt-get purge golang*

Что выводит следующие предупреждения:

dpkg: warning: while removing golang-go, directory '/usr/lib/go/src' not empty so not removed
dpkg: warning: while removing golang-go.tools, directory '/usr/lib/go' not empty so not removed

Похоже, что при удалении go некоторые файлы остаются, что, в свою очередь, может запутать более новую установку. Точнее, сама установка завершится нормально, но после этого любая команда go, например «go get something», выдает эти ошибки «нераспознанный путь импорта».

Все, что мне нужно было сделать, это сначала удалить эти каталоги, переустановить golang, и все работает как шарм (при условии, что вы также установили GOPATH)

# careful!
sudo rm -rf /usr/lib/go /usr/lib/go/src
sudo apt-get install golang-go golang-go.tools
Ярекс
источник
Мне тоже пришлось удалить/usr/local/go/
Натим
Также пришлось удалить / usr / bin / go.
eatonphil
6

Потому что GFW запретил вам доступ к golang.org! И когда я использую прокси, он может хорошо работать.

вы можете посмотреть информацию, используя команду go get -v -u golang.org/x/oauth2

Jefby
источник
1
Это как раз та проблема, с которой я нахожусь в Китае. После установки $ http_proxy я могу установить пакет без ошибок.
ashen
1
Не только заблокирован, но и загрязнен DNS. Сначала перейдите по адресу, чтобы http://ping.eu/nslookup/найти правильный IP-адрес домена, укажите его в файле hosts, затем используйте прокси-сервер для загрузки. export http_proxy=127.0.0.1:1080 https_proxy=127.0.0.1:1080 Иногда вы просто хотите сказать правительству слово на
букву
4

$ unset GOROOTработал у меня. Как показывает большинство ответов, ваш GOROOT недействителен.

Ноэльмклафлин
источник
2

У меня была такая же проблема на MacOS 10.10. И я обнаружил, что проблема вызвана оболочкой OhMyZsh. Затем я снова переключился на bash, все прошло нормально.

Вот мой go env

bash-3.2$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/bis/go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1
Игорь Баринов
источник
Это go envкогда не сработало или когда сработало? Вероятно, это было не «вызвано [другой оболочкой]», скорее, скорее всего, это была неправильная установка GOPATHв этой другой оболочке. Оболочки семейств csh и zsh не используют одни и те же файлы запуска (т.е. нет ~/.profile). В частности, zshиспользует $ZDOTDIR/.zshenvи $ZDOTDIR/.zprofile(где по $ZDOTDIRумолчанию $HOME).
Dave C
1

Наиболее частые причины:
1. Неправильно настроенный GOROOT
OR
2. GOPATH не установлен.

Клайд Д'Круз
источник
0

У меня была такая же проблема после обновления go1.2 до go1.4.

Я переименовал src в _src в моем GOPATH, затем сделал go get -v

Это сработало, я удалил _src.

Надеюсь, это поможет.

Амори Брису
источник
0

Я столкнулся с этой проблемой при установке другого пакета, и это могло быть вызвано конфигурацией GOROOT и GOPATH в вашем PATH. Я стараюсь не устанавливать GOROOT, потому что моя установка OS X справилась (я полагаю) за меня.

  1. Убедитесь, что в вашем .profile (или там, где вы храните конфигурацию профиля: .bash_profile, .zshrc, .bashrc и т. Д.) Следующее:

    export GOPATH=$HOME/go
    export PATH=$PATH:$GOROOT/bin
    
  2. Кроме того, вы, вероятно unset GOROOT, тоже захотите , если этот путь также неверен.

  3. Кроме того, не забудьте очистить свой PATH, аналогично тому, что я сделал ниже, непосредственно перед назначением GOPATH, то есть:

    export PATH=$HOME/bin:/usr/local/bin:$PATH
    export GOPATH=$HOME/go
    export PATH=$PATH:$GOROOT/bin
    
  4. Затем, source <.profile>чтобы активировать

  5. повторить попытку go get
ThatsAMorais
источник