잠시 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 installgo get-ugo getgo 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 getc:\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. 이 경우 다운로드 프로세스가 없기 때문입니다.