내 main.go 파일에 대한 사용자 지정 패키지를 설치하려고합니다. 그러나 내가 달렸을 때
go install custom.go
이 오류가 발생했습니다
go install: no install location for .go files listed on command line (GOBIN not set)
GOBIN은 어떻게 설정하나요?
내 main.go 파일에 대한 사용자 지정 패키지를 설치하려고합니다. 그러나 내가 달렸을 때
go install custom.go
이 오류가 발생했습니다
go install: no install location for .go files listed on command line (GOBIN not set)
GOBIN은 어떻게 설정하나요?
답변:
업데이트 2020 : 이동 1.11과 이후 이동 모듈의 도입 , GOPATH
더 이상 프로젝트별로 필요하지 않고, 기본값은~/go
글로벌 도구는 / 당신이하고자 프로젝트 go get
.
Go 1.16 (2020 년 1 분기)의 기본값 GOBIN
은 GOPATH[0]/bin
.
그러나 지금은 모듈을 사용하는 모든 프로젝트의 경우 " go install: no install location ...
" 와 같은 오류 메시지가 더 이상 표시되지 않습니다.
2014 년 원래 답변 :
GOPATH
변수를 확인하십시오 .
다음 사항을 확인하십시오.
- 당신의 출처는 아래에 있습니다
GOPATH/src
bin
당신의 GOPATH 폴더 안에 폴더를.참조 GOPATH 환경 변수 ( 'DIR'는 것입니다 GOPATH
폴더) :
bin
디렉토리는 컴파일 명령을 보유하고 있습니다.
각 명령은 소스 디렉토리의 이름이 지정되지만 전체 경로가 아닌 마지막 요소 만 지정됩니다. 즉, 소스가있는 명령DIR/src/foo/quux
이에 설치DIR/bin/quux
되지 않고에 설치됩니다DIR/bin/foo/quux
. 은 "foo/
당신이 추가 할 수 있도록"접두어가 제거되고DIR/bin
사용자에PATH
설치된 명령에서 얻을 수 있습니다.
경우
GOBIN
환경 변수가 설정되고, 명령은 디렉토리 대신 그 이름에 설치됩니다DIR/bin
.GOBIN
절대 경로 여야합니다.
예를 들어, 이 스레드 는 go 빌드가 외부에서 수행되는 경우 어떤 일이 발생하는지 보여줍니다 GOPATH/src
.
당신 같은 외모
GOPATH
로 설정되어~/go
있지만 실행go install
에 명령을~/dev/go
Go Build 보기
Go 경로는 Go 소스 코드를 포함하는 디렉토리 트리 목록입니다. 표준 Go 트리에서 찾을 수없는 가져 오기를 해결하기 위해 참조됩니다.
을 완료 한 경우 (아니오 )를 go build
시도 할 수도 있습니다. 단일 파일이 아닌 패키지를 설치하려고합니다.go install
custom.go
나는 GOBIN 경로를 설정했고 그것은 나를 위해 일했습니다.
export GOBIN=[WorkspacePath]/bin
cannot install, GOBIN must be an absolute path
(
..
또는 ~
지정한 경로 를 사용 했습니까 ? 그 오류가 발생하여 /home/ben/bin/
또는 같은 절대 경로로 전환했습니다 $HOME/bin/
. 내 전체 명령은 (fishshell에서 v1.11로 이동) env GOBIN=$HOME/bin/ go install testfile.go
입니다.
초보자로서 다양한 go 명령 (빌드, 실행 및 설치)을 시도 할 때이 오류가 발생했습니다. 즉, 당신은 할 수없는 설치 이동 filename.go을 . 패키지 만 설치할 수 있습니다.
다음을 배웠기 때문에 이것은 혼란 스러웠습니다.
nate:~/work/src/dir $ go run hello/hello.go
hello, world.
잘 작동합니다. 그러나 설치 가 작동하지 않는 이유를 알 수 없었습니다.
nate:~/work/src/dir $ go install hello/hello.go
go install: no install location for .go files listed on command line (GOBIN not set)
nate:~/work/src/dir $ go install hello
can't load package: package hello: cannot find package "hello" in any of:
/opt/go/src/hello (from $GOROOT)
/home/ubuntu/work/src/hello (from $GOPATH)
내가 어떤 디렉토리에 있었 든 상관 없습니다.
nate:~/work/src/dir $ cd hello
nate:~/work/src/dir/hello $ go install hello.go
go install: no install location for .go files listed on command line (GOBIN not set)
nate:~/work/src/dir/hello $ go install hello
can't load package: package hello: cannot find package "hello" in any of:
/opt/go/src/hello (from $GOROOT)
/home/ubuntu/work/src/hello (from $GOPATH)
이 혼란은 go run 이 Go 소스 파일 (.go로 끝나는 파일 이름) 에서만 작동하고 go install 은 패키지 만 허용하기 때문입니다. 패키지는 가져 오기 경로 또는 파일 시스템 경로로 이름이 지정됩니다. 그러므로:
nate:~/work/src/dir $ go install dir/hello
nate:~/work/src/dir $ go install ./hello/
nate:~/work/src/dir/hello $ go install .
모두 잘 작동합니다. 첫 번째는 가져 오기 경로로 패키지를 참조합니다 ($ GOPATH = "/ home / nate / work"라고 가정하면 go 도구는 / home / nate / work / src에서 소스 코드를 찾습니다). 나머지는 파일 시스템으로 해석됩니다. 선행 기간 때문에 경로.
GOPATH 문서 도 참조하십시오 .
go install
디렉토리에서 작동하며 특정 go 파일을 지정하면이 특정 문제가 발생할 수 있습니다.
실제로 두 가지 종류의 행동이 있습니다.
go install <package>
이것은 컴파일 및 패키지 및 종속성 설치에 문서화되어 있습니다. GOPATH를 올바르게 설정하면 GOBIN이 필요하지 않습니다.
go install <gofile>
이것은 문서화되지 않았으며이 모드에서는 GOBIN 환경 변수가 필요합니다.
go install <gofile>
에서, 문서화 go help packages
되는 go install --help
지칭한다. 문제는 go install
(1.9.2 및 이전 버전에서) 일관되지 않은 동작이 있다는 것입니다. 한 경우에는 필요하고 다른 경우에는 명시 적으로 설정하는 데 GOBIN이 필요하지 않습니다.
이전 답변에서 지적했듯이 GOPATH 환경이 작업 공간에 올바르게 설정되어 있으면 GOBIN 환경 변수를 설정할 필요가 없습니다.
$ go env |를 실행하여 go 환경 변수를 확인하십시오. grep -i "^ GO"를 선택하고 GOROOT 및 GOPATH를 찾아 GOROOT가 GO 소스 설치를 가리키고 GOPATH가 작업 공간을 가리키고 있는지 확인합니다.
모든 것이 올 바르면 yourpkg.go가있는 하위 디렉토리로 이동 한 다음 먼저 $ go build (파일 이름없이)를 실행하고 $ go install (다시 파일 이름으로) second를 실행합니다. 화면에 오류 메시지가 표시되지 않으면 패키지는 작업 공간 /pkg/youros/../yourpackage.a에서 준비되었습니다.
cygwin이있는 Windows에서는 GOBIN을 $ GOPATH / bin으로 설정하는 것이 좋습니다.
Windows 파일 이름 구분 기호를 올바르게 이스케이프해야합니다.
$ echo $GOROOT
C:\Go\
carl@rainier ~/gocode/src/github.com/user/hello
$ echo $GOPATH
C:\cygwin64\home\carl\gocode
carl@rainier ~/gocode/src/github.com/user/hello
$ echo $GOBIN
C:\cygwin64\home\carl\gocode\bin
들어 *nix
시스템, 어디 있는지 go
다음 명령을 실행, 설치됩니다
$ which go
어떤 출력이 다음과 같이 말합니까?
/usr/local/go/bin/go
그런 다음 ~/.bash_profile
또는에 다음 항목을 추가하십시오 ~/.zshrc
.
export GOROOT=/usr/local/go
export GOPATH=$GOROOT/src //your-go-workspace
export GOBIN=$GOROOT/bin //where go-generate-executable-binaries
PATH=$PATH:$GOPATH:$GOBIN
export PATH
추신 : 마 소스에 잊지 ~/.bash_profile
또는 ~/.zshrc
다음과 같이 :
$ source ~/.bash_profile
/usr/local/go/bin
하시겠습니까?
설정에 관해서는 GOBIN
그것을 필요로하는 단지에 의존하지 변수 버전 GOPATH
:
GOBIN
패키지가없는 경우 필요합니다. 즉, 파일이 GOPATH
디렉토리에 직접 있습니다 . 학습자로서 Go 기능을 사용해 볼 때입니다.
일반적인 Go 프로젝트의 경우 파일은 패키지 디렉터리 아래에 있습니다. 이것으로 GOPATH
충분합니다.
즉, 다음 두 솔루션이 모두 작동합니다. GOBIN
$ GOPATH / bin으로 명시 적으로 설정 [학습용으로 만 사용, 피할 수 있음] b. 패키지 이름이 될 하위 디렉토리를 만들고 .go 파일을 여기로 이동하십시오.
Go 유틸리티는 인수가 디렉토리인지 소스 파일인지에 따라 위의 오류를 제거하고 시나리오를 더 잘 처리해야한다고 생각합니다.
대한 WINDOWS의 사용자
명령 프롬프트 ( Win
+ r
입력 후 입력 cmd
) 또는 powershell 창 ( Win
+ x
입력 후 입력 i
)을 엽니 다 .
GOPATH 설정
참고 : Go 설치와 동일한 경로
GOPATH
가 아니어야 합니다.
go env -w GOPATH=c:\your-go-work
자세한 내용은 https://github.com/golang/go/wiki/SettingGOPATH#windows 아래 링크를 참조 하십시오.
GOBIN 설정
go env -w GOBIN=C:\somewhere\else\bin
golang에서 제공하는 코드 예제를 확인하는 것이 좋습니다. 많은 도움이되었습니다. https://golang.org/doc/code.html#Command
나도 같은 문제가 있었는데 (고빈은 따로 설정하지 않아도 됨) 다음 사항이 있는지 확인하십시오.
go install <your_module>
에서 https://golang.org/cmd/go/#hdr-Environment_variables :
GOBIN 'go install'이 명령을 설치할 디렉토리입니다.
및 https://golang.org/cmd/go/#hdr-GOPATH_environment_variable :
GOBIN 환경 변수가 설정되면 명령은 DIR / bin 대신 이름이 지정된 디렉토리에 설치됩니다. GOBIN은 절대 경로 여야합니다.
및 https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more
모듈 인식 모드에서 GOPATH는 더 이상 빌드 중에 가져 오기의 의미를 정의하지 않지만 다운로드 된 종속성 (GOPATH / pkg / mod에 있음) 및 설치된 명령 (GOBIN이 설정되지 않은 경우 GOPATH / bin에 있음)을 계속 저장합니다.
따라서 기본적으로 GOBIN을 사용하여 기본 바이너리 설치 위치 (예 :)를 일시적 또는 영구적으로 재정의 할 수 있습니다 $GOPATH/bin
. .NET을 사용하여 1 개의 파일 go "스크립트"를 성공적으로 설치했습니다 env GOBIN=$HOME/bin/ go install testfile.go
. 이것은 go v1.11을 사용하여 수행되었습니다.
시험
export GOROOT=""
export PATH=$PATH:$GOROOT/bin
go install
설치 합니다. golang.org/cmd/go를 모두 읽고 파일 설정 방법을 확인하세요.