잠시 go
동안 도구를 사용하면 다음과 같이 보입니다 go get
.
- (선택적으로) 다운로드,
- 컴파일,
- 및 설치
소프트웨어의 조각 반면, go install
단순히
- 컴파일
- 및 설치
그것. 이 경우 go install
명령을 go get
대체하는 이유는 무엇입니까?
답변:
go install
로컬에서 작업 할 때 워크 플로의 일부입니다. 라이브러리를 사용하고 싶지만 어떤 이유로 든 변경이 필요하다고 가정 해 보겠습니다. 당신은 할 것입니다 :
go get -d library
, 다운로드 만합니다.go install library
로컬 버전을 설치합니다.내가 아는 한 다운로드 하지go get
않아야 함을 나타내는 플래그가 없으므로 여기에서 바꿀 수 없습니다 .go install
새 패키지를 처음부터 개발할 때도 동일한 워크 플로가 사용됩니다.
go install
당신의 목표를 더 분명하게 만들지 만, 나는 둘 다 같은 것을 성취 할 것이라고 생각합니다. 다음과 같이 선언 된 패키지를 포함하여 몇 가지 패키지로 테스트했으며 main
동등하게 보였습니다. 이 명령에 대한 문서는 매우 부족합니다.
go get
대신 사용할 수도 있습니다 (를 추가하지 않는 한 ). 라이브러리를 처음부터 작성할 때도 사용할 수 있습니다 . 완전히 중복 된 것 같습니다. go install
go get
-u
go get
go install
go get
이 순서로 두 가지 주요 작업을 수행합니다.
$GOPATH/src/<import-path>
가져 오기 경로에 이름이 지정된 패키지 (소스 코드)를 종속성과 함께 다운로드하고 저장 한 다음
실행 go install
-d
플래그 ( go get -d
) 지시 go get
패키지를 다운로드 한 후 중지; 즉, go get
하지 말라고 지시 합니다.go install
차이점:
go get
// 패키지를 다운로드해야하는지 확인하고 필요한 경우 다운로드 한 다음 컴파일
go install
// 패키지 다운로드가있는 부분을 건너 뛰고 컴파일 만합니다 (패키지가 없으면 오류가 발생 함).
에 대한 GOPATH
환경 변수
GOPATH
환경 변수는 이동 도구로 사용됩니다. 그것은 가능하도록하기 위해 설정해야합니다 get
, build
그리고 install
패키지, 그리고 작업 공간의 위치를 지정합니다. Go 코드를 개발할 때 설정해야하는 유일한 환경 변수 일 수 있습니다.
다시 말하지만 GOPATH
은 Go 설치가 아니라 작업 공간을 가리켜 야합니다.
예를 들어 Windows에서 작업 공간이에 있다고 결정 c:\gowork\
하면 GOPATH
값을 다음과 같이 설정해야합니다.c:\gowork
소스 코드는에 있어야하며 명령 프롬프트에서 c:\gowork\src\<some project folder>\
실행 한 후에 는 및 생성되는 것을 볼 수 있습니다 .go get
c:\gowork\src\<some project folder>\
c:\gowork\bin\
c:\gowork\pkg\
go install
모듈 인식 설정에서 패키지를 다운로드합니다.
참고 이동 1.16 (Q1 2021)를 구현, 그 차이가 명확하게됩니다 CL 266360 의 일환으로 문제 40276 :
go install
이제 버전 접미사가있는 인수를받습니다 (예 :)go install example.com/cmd@v1.0.0
.
이 원인은go install
하는 구축 및 모듈 인식 모드에서 패키지를 설치 , 무시하고go.mod
파일이 존재하는 경우, 현재 디렉토리 또는 상위 디렉토리에 있습니다.
이것은 주 모듈의 종속성에 영향을주지 않고 실행 파일을 설치하는 데 유용합니다 .
go install
, 버전 접미사가 있거나없는 (위에서 설명한대로) 이제 모듈 모드에서 패키지를 빌드하고 설치하는 데 권장되는 방법입니다.
go get
-d
패키지 를 빌드 하지 않고 현재 모듈의 종속성을 조정 하려면 플래그 와 함께 사용해야하며 패키지 를 빌드하고 설치하는 데를 사용하는go get
것은 더 이상 사용되지 않습니다 .
A의 향후 릴리스의-d
플래그는 항상 활성화됩니다 .
go install
. 그리고 현재 모듈 컨텍스트에 관계없이 특정 버전에 패키지를 설치합니다. 그것은 이전에 비해 즉흥적 go get
입니다.
go get ./path/to/local_package
에서도 사용할 수 있으며go install ./path/to/local_package
. 이 경우 다운로드 프로세스가 없기 때문입니다.