Перейти "непризнанный импорт"
На fedora 22 я обнаружил, что все стандартные библиотеки go не видны на пути к go.
ПРИМЕЧАНИЕ. Я действительно очистил свою систему от golang - так что я уверен, что это не проблема смешанного управления версиями пакетов, которая часто может возникнуть при обновлении go.
ПРИМЕЧАНИЕ. Версия go, которую я установил, - 1.4.2.
Я установил GOROOT=/usr/lib/golang и GOPATH=(что угодно).
Какие внутренние каталоги в / usr / lib / golang я должен изучить для устранения проблем с отсутствующими библиотеками?
Простой пример неудач, которые я получаю, ниже...
[jay@rhbd gopath]$ go get github.com/golang/example/hello
package github.com/golang/example/hello
imports fmt: unrecognized import path "fmt"
package github.com/golang/example/hello
imports runtime: unrecognized import path "runtime"
и соответствующий go env:
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/jay/gopath/"
GORACE=""
GOROOT="/usr/lib/golang"
GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"
ОБНОВИТЬ
Что касается комментариев в этой теме... Похоже, у меня нет ничего в / usr / lib / golang / src. Означает ли это, что мой дистрибутив Go не работает? Если так, может быть, двоичный файл Go должен быстро потерпеть неудачу, когда это так...?
1 ответ
TLDR
Окончательное решение моей проблемы было следующим (это может быть излишним).
yum erase golang-src
rm -rf /usr/lib/golang/
yum install golang-src golang
После установки golang-src вы должны подтвердить, что действительно в GOROOT/src/ есть несколько пакетов для всех стандартных go libs, то есть перечисленных ниже.
ДЕТАЛИ КАК РАССМОТРЕТЬ ГОЛАНГОВЫЕ УСТАНОВКИ
Очевидно: go get
получает и устанавливает указанный вами исходный код. Большинство библиотек go используют стандартные библиотеки, такие как io
или же bytes
и так далее. Следовательно, хороший тест, что ваш дистрибутив go установлен правильно, и что ваш GOPATH также установлен - это запустить go get
, Например go get github.com/golang/example/hello
достаточно, чтобы выявить недостаток стандартных библиотек GOROOT.
Первое, что нужно сделать, это проверить, что GOROOT из коробки в вашем isntallation. Это доступно, запустив go env
, который даст вам все переменные среды.
В общем GOROOT должен иметь src/
каталог под ним. Однако, если у вас сломан пакет go, то некоторые из этих библиотек могут (по некоторым причинам) не находиться в GOROOT/src. То есть, вы ДОЛЖНЫ видеть каталоги с исходными текстами для основных компонентов go, например, из работоспособной установки go.
ls /usr/lib/golang/src/
all.bash builtin/ compress/ errors/ html/ libbio/ Make.dist os/ run.bash strings/ time/
all.bat bytes/ ...... net/ regexp/ strconv/ text/
Теперь, оглядываясь назад на мою неработающую установку, она выглядела совсем иначе, чем выше... Похоже, у меня НИЧЕГО нет в / usr / lib / golang / src. Это в основном означает, что в моем пакете go отсутствовали некоторые очень важные компоненты, и почти все go get ...
операция завершится ошибкой, поскольку ни одна из стандартных библиотек go не находится в пути GOROOT.
Как упоминалось выше - конечное решение здесь было просто yum erase golang-src
, rm -rf /usr/lib/golang/
а затем и yum install golang-src golang
,