Не удается заставить Голанг работать в Ubuntu - программирование
Подтвердить что ты не робот

Не удается заставить Голанг работать в 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)
4b9b3361

Ответ 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="", и он должен исправить вашу проблему.