환경 변수를 올바르게 설정하는 방법(Manjaro의 golang)

환경 변수를 올바르게 설정하는 방법(Manjaro의 golang)

Go 설치에 문제가 있습니다. 저는 Manjaro를 사용하고 있는데 Manjaro가 우분투 및 Windows 제안과 다르게 go env를 처리하는 것 같기 때문에 이것과 관련이 있다고 생각합니다.

나는 설치했고 예상대로 코드를 실행할 수 있습니다.

$ go run gitlab.com/gitlabtest
Hello, GitLab!

그런 다음 환경 변수가 설정되어 있는지 확인합니다.

$ echo $GOROOT

$ echo $GOPATH

$ echo $GOBIN

$

그래서 그런 것 같지 않은데, 이상하네요. 테스트 프로그램을 실행할 수 있는 이유는 무엇입니까? 다른 방법으로 환경 변수를 확인해 보았습니다.

$ go env GOROOT
/usr/lib/go
$ go env GOPATH
/home/bluebrown/go
$ go env GOBIN

$ 

정말 흥미롭습니다. Go 자체는 환경 변수를 어느 정도 이해하고 있는 것 같습니다. 그렇기 때문에 어디에서나 효율적으로 go 코드를 실행할 수 있습니다 . 아직 해결되지 않은 $GOPATH문제가 하나 있습니다 .$GOBIN

글쎄, 이것은 내 ~/.bash_profile을 편집해야 한다는 것을 의미합니다.

#
# ~/.bash_profile
#
[[ -f ~/.bashrc ]] && . ~/.bashrc

export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export GOBIN=$HOME/go/bin

드디어 원하는 결과를 얻었습니다.

$ source .bash_profile
$ echo $GOROOT &&echo $GOPATH &&echo $GOBIN
/usr/lib/go
/home/bluebrown/go
/home/bluebrown/go/bin
$
$ go env GOROOT &&go env GOPATH &&go env GOBIN
/usr/lib/go
/home/bluebrown/go
/home/bluebrown/go/bin

$GOBIN좋습니다. 이제 비슷한 패키지를 사용할 수 있습니다.미끄러지 다또는지사옳은?

[~]$ go get -u -v github.com/kardianos/govendor
github.com/kardianos/govendor (download)
[~]$ cd $GOPATH/src
[src]$ mkdir testdir
[src]$ cd testdir
[testdir]$ govendor init
bash: govendor: command not found

글쎄요, 아닐 수도 있어요. 그래서 글라이드를 시도합니다.

$ curl https://glide.sh/get | sh
$...
$which: no glide in  
$ (/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:  
   /usr/lib/jvm/default/bin:/usr/bin/site_perl:
   /usr/bin/vendor_perl:/usr/bin/core_perl:/usr/local/go/bin)

glide not found. Did you add $GOBIN to your $PATH?
Fail to install glide

알고 보니 안에 있던 가방은 $GOBIN찾을 수 없었습니다. 장치를 다시 시작하면 어떤 이유로 모든 것이 다시 재설정됩니다 :(

이 시점에서 나는 무엇을 해야할지 모르겠습니다.

답변1

go get사용되거나 설치된 Golang 바이너리를 실행할 수 있는 것과 관련하여 , 이것이 제대로 작동하려면 go install파일에 Golang "bin" 디렉터리를 추가해야 합니다 .$PATH

않으니 참고해주세요진짜$GOBIN이것이 작동하려면 변수를 설정 해야 합니다 . 없는 경우 초기화 파일 중 하나에서 다음과 같은 것을 사용하십시오(예 ~/.bash_profile: ).

PATH=$PATH:$HOME/go/bin

(물론, 그렇게 설정했다면 $GOBIN대신에 그것을 사용하세요 PATH=$PATH:$GOBIN.)


Golang 환경 변수를 설정하지 않는 것과 관련하여 요즘 대부분의 경우 필요하지 않습니다.

$GOROOT변수는 Golang 설치의 압축 해제 위치를 가리킵니다. "공식" 배포판을 사용하는 경우 기본값은 이므로 /usr/local/go해당 디렉터리에 배포판의 압축을 풀면 설정할 필요가 없습니다. Linux 배포판에서는 이 기본값을 패키지된 Golang 파일의 위치로 맞춤화하는 경우가 많으며 Manjaro의 경우 더 합리적입니다 /usr/lib/go. 어쨌든 배포판에 패키지된 Golang을 사용하거나 공식 버전을 기본 위치에 압축을 풀면 이 변수가 됩니다. 세트는 필요하지 않습니다.

에 대해서는 $GOPATH예전에는 필수였으나 Golang 1.8부터는 이제기본값은~/go:

GOPATH시스템의 모든 디렉터리가 될 수 있습니다. Unix 예제에서는 $HOME/go(Go 1.8 이후 기본값) 로 설정했습니다 .

따라서 Golang 패키지(예: 사용하는 패키지 go get)를 기본 위치에 저장하는 데 동의하면 해당 패키지를 설정할 필요가 없습니다.

마지막으로 $GOBIN기본값은 bin. $GOPATH따라서 일반적으로 사용자 정의할 필요가 없습니다.

알다시피, go env이러한 변수를 설정하지 않으면 Golang의 이러한 변수 개념이 무엇인지 확인할 수 있으며, 이 경우 Golang은 위의 기본값을 사용해야 합니다.

물론, 쉘에서 이러한 변수를 참조하려면 해당 변수를 설정해야 합니다! Golang에 이러한 개념에 대한 기본값이 있다는 사실은 Golang이 설정되지 않은 변수를 사용할 수 있다는 것을 의미합니다. Golang이 이러한 변수를 마술처럼 환경에 주입한다는 의미는 아닙니다. 그리고 다시 말하지만, Golang 바이너리를 에 포함시키려면 $PATH이를 설정해야 합니다. 답변 상단의 지침을 참조하세요.

관련 정보