Не удается заставить Голанг работать в Ubuntu
Итак, я загрузил Go 1.1 и поместил его в $HOME/Documents/go.
Затем я изменил свой .bashrc
следующим образом:
export GOPATH=$HOME/Documents/go
export GOROOT=$GOPATH
export GOARCH=amd64
export GOOS=linux
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
Чем я получил .bashrc
и попытался:
[email protected]:~$ go version
go version go1.1 linux/amd64
Но я не могу заставить его скомпилировать или установить какие-либо зависимости.
Например. Я пытаюсь запустить мою небольшую тестовую программу:
[email protected]:~/Documents/go/src/github.com/jan/scrypt$ go run scrypt.go
warning: GOPATH set to GOROOT (/home/jan/Documents/go) has no effect
scrypt.go:9:3: cannot find package "github.com/dchest/scrypt" in any of:
/home/jan/Documents/go/src/pkg/github.com/dchest/scrypt (from $GOROOT)
($GOPATH not set)
[email protected]:~/Documents/go/src/github.com/jan/scrypt$
И когда я пытаюсь установить зависимости:
[email protected]:~/Documents/go/src/github.com/jan/scrypt$ go get "github.com/dchest/scrypt"
warning: GOPATH set to GOROOT (/home/jan/Documents/go) has no effect
package github.com/dchest/scrypt: cannot download, $GOPATH must not be set to $GOROOT. For more details see: go help gopath
Он компилируется и отлично работает на mac. Я не могу понять, что не так с моей конфигурацией, если я пытаюсь удалить $GOROOT
или $GOPATH
, ничего не работает, и я не знаю, что еще их устанавливать, кроме пути к Go.
EDIT:
На моем Mac нет набора $GOROOT. Но если я удалю $GOROOT
на ubuntu, я получаю кучу ошибок, подобных этим, когда пытаюсь скомпилировать.
cannot find package "fmt" in any of:
/usr/local/go/src/pkg/fmt (from $GOROOT)
/home/jan/Documents/go/src/fmt (from $GOPATH)
Ответы
Ответ 1
Ваша переменная среды, которую вы установили
$ export GOROOT=$GOPATH
- ошибка. Нигде такая настройка не требуется и не рекомендуется. Фактически, он искажает среду, видимую системой сборки Go.
Удалите этот параметр, заново создайте среду (. bashrc
) или откройте новый терминал, и он должен работать (если не существует других проблем).
Кроме того, если вы не перекрестно компилируете, я рекомендую также удалить эти файлы:
export GOARCH=amd64
export GOOS=linux
Короче говоря, правильная экспортированная GOPATH - единственная переменная среды, которая в первом приближении действительно нужна. Еще несколько подсказок здесь.
EDIT: Хорошо, поэтому я загрузил двоичный дистрибутив (go1.1.linux-amd64.tar.gz). Цитата из README:
Замечания о двоичном распределении
Если вы только что разобрали бинарный дистрибутив Go, вам нужно установить переменная среды $GOROOT на полный путь (тот, который содержит этот README). Вы можете опустить переменная, если вы распаковываете ее в /usr/local/go или если вы перестраиваете из источников, запустив all.bash(см. doc/install.html). Вы также должны добавить двоичный каталог Go $GOROOT/bin к вашему пути оболочки.
Например, если вы извлекли файл tar в файл $HOME/go, вы можете введите в свой файл .profile следующее:
export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin
Подробнее см. doc/install.html.
Из этого ясно, что вы, должно быть, не следовали приведенным выше инструкциям. Исправьте это, и я надеюсь, что это сработает для вас.
Ответ 2
Для установки выполните ubuntu сначала удалите предыдущую установку
dpkg -l|grep golang # if you see any, run following cmd to remove
sudo apt-get remove --purge golang-*
Убедитесь, что go все еще установлен
type go # see if go is installed
типичный выход, если go установлен
go is hashed (/usr/local/go/bin/go)
Если go установлен, удалите его
sudo rm -rf /usr/local/go
загрузите последний tarball https://golang.org/dl/ разверните и установите
new_golang_ver=$(curl https://golang.org/VERSION?m=text 2> /dev/null)
cd /tmp
wget https://dl.google.com/go/${new_golang_ver}.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf ${new_golang_ver}.linux-amd64.tar.gz
определите эти переменные среды в ~/.bashrc
export GOROOT=/usr/local/go
export PATH=${GOROOT}/bin:${PATH}
export GOPATH=${HOME}/gopath # typical value change at will
export PATH=${GOPATH}/bin:${PATH}
укажите ваши новые новые определения env var
source ~/.bashrc
проверить установку
go version
если установлен правильно типичный выход
go version go1.9.3 linux/amd64
--- установка завершена, поэтому давайте скомпилируем мир приветствия ---
[[ ! -d $GOPATH ]] && mkdir -p ${GOPATH}/{bin,pkg,src} # if no dir then create
mkdir -p ${GOPATH}/src/github.com/mygithubname/play
cd ${GOPATH}/src/github.com/mygithubname/play
теперь вставьте следующий, чтобы создать исходный файл go hello_world.go
tee hello_world.go << WOW
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
WOW
скомпилируйте исходный код
go build hello_world.go
./hello_world # run your executable
привет, мир
чтобы понять, как структурировать исходный код go, см. https://golang.org/doc/code.html
Исправить недостающую ошибку пакета
Вы также спросили, как исправить недостающие ошибки зависимостей... например
[email protected] ~/other_src/gopath/src/github.com/bigeagle/gohop $ go build
hop/cipher.go:27:2: cannot find package "github.com/golang/snappy" in any of:
/usr/local/go/src/github.com/golang/snappy (from $GOROOT)
/home/scott/other_src/gopath/src/github.com/golang/snappy (from $GOPATH)
internal/logging.go:6:2: cannot find package "github.com/op/go-logging" in any of:
/usr/local/go/src/github.com/op/go-logging (from $GOROOT)
/home/scott/other_src/gopath/src/github.com/op/go-logging (from $GOPATH)
выше ошибка произойдет даже после того, как ваша установка будет настроена OK... просто выпустите это, чтобы загрузить и установить отсутствующие пакеты хостов с обратной связью вверх (и те, которые они могут также ссылаться рекурсивно)
cd ~/Documents/go/src/github.com/jan/scrypt/ # cd into the source dir
go get -v -t ./... # -v verbose
# -t also download any test only packages
go build
Ответ 3
TL;DR: Отменить $GOROOT
, выполнив следующую команду в вашем терминале export GOROOT=""
У меня был Go установлен на Ubuntu 16.04, и все работало нормально.
Затем по ошибке я установил $GOROOT
в $GOPATH
после учебника, после чего моя сборка начала терпеть неудачу:
warning: GOPATH set to GOROOT has no effect
cannot find package "fmt" in any of:
... (from $GOROOT) ($GOPATH not set)
cannot find package "io/ioutil" in any of:
imports runtime: cannot find package "runtime" in any of:
/home/mhsn/go/src/runtime (from $GOROOT)
($GOPATH not set)
Каждое прочитанное мной решение предлагало не устанавливать эту переменную, и я хотел отменить это. Я нашел следующее исправление, чтобы его не удалось: export GOROOT=""
в bash.
Отменив $GOROOT
обратно на пустой, который был рекомендован всеми, верните исходный путь по умолчанию. И это исправило проблему для меня, и начать сборку начал работать снова.
Ответ 4
Вы не должны устанавливать $GOROOT для нормальной установки.
Просто введите export GOROOT=""
, и он должен исправить вашу проблему.