developer tip

Go 빌드 빌드는 무엇입니까?

optionbox 2020. 10. 17. 10:25
반응형

Go 빌드 빌드는 무엇입니까?


새로운 Go 프로그래머는 기본 go build 명령이 수행하는 작업을 알지 못하거나 혼동하는 경우가 많습니다.

go buildgo install명령 은 정확히 무엇을 빌드하고 결과 / 출력을 어디에 배치합니까?


어떤 go명령을 수행하는 것은 우리가 "정상"패키지 실행 여부에 특수에 대한 의존 "main"패키지로 제공된다.

패키지 용

  • go build  패키지를 빌드 한 다음 결과버립니다 .
  • go install그런 다음 builds $GOPATH/pkg 디렉토리에 패키지 설치 합니다 .

명령 (패키지 main)

  • go build  명령을 빌드하고 결과를 현재 작업 디렉토리 에 둡니다 .
  • go install임시 디렉토리에 명령을 빌드 한 다음 $GOPATH/bin.

기본적으로 go build패키지가 (종속성과 함께) 빌드 될 수 있는지 확인하는 동시에 .NET go install의 적절한 폴더에 결과를 (영구적으로) 설치할 수 있습니다 $GOPATH.

go build 모든 것이 정상이면 자동으로 종료되고 패키지를 빌드 / 컴파일 할 수없는 경우 오류 메시지가 표시됩니다.

go도구는 패키지 나 바이너리를 설치할 때마다 어떤 종속성도 설치하므로 실행 go install하면 프로그램이 의존하는 패키지 (공개적으로 사용 가능한 "go gettable"패키지)도 자동으로 설치됩니다.

먼저 공식 Go 코드 작성 방법 페이지를 읽어보세요.

go도구 에 대한 추가 정보 : Command go

다음 명령을 실행하여 추가 도움말을 얻을 수도 있습니다.

go help build

Go 1.5로 시작 go install하면 go build( source )에서 만든 실행 파일도 제거 된다는 점도 주목할 가치가 있습니다 .

'go install'(인수없이 현재 디렉토리를 의미 함)이 성공하면 'go build'로 작성된 실행 파일이 있으면 제거합니다. 이것은 오래된 바이너리를 남겨 두는 것을 방지합니다 ...

목록을 완성하려면 go run응용 프로그램을 임시 폴더로 컴파일하고 실행 가능한 바이너리를 시작합니다. 앱이 종료되면 임시 파일을 올바르게 정리합니다.

Dave Cheney의 What does go build build 에서 영감을 얻은 질문


패키지 :

go build: 패키지를 빌드 한 다음 결과 버립니다 .

Go 1.10 (2018 년 1 분기) 이후에는 그렇지 않습니다 . CL 68116CL 75473 덕분 입니다. 여기에서 참조하는 이 스레드를 참조하십시오.

go buildgo install명령 이 정확히 무엇을 빌드 합니까?

go 도구가 패키지 또는 바이너리를 설치할 때마다 종속 항목도 설치하므로 go install을 실행하면 프로그램이 의존하는 패키지 (공개적으로 사용 가능한 "go gettable"패키지)도 자동으로 설치됩니다.

실제로 ... go installGo 1.10에서도 새 캐시 에 추가 됩니다.

" go install"명령은 더 이상 명명 된 패키지의 종속성을 설치하지 않습니다 ( CL 75850 ).

" go install foo" 을 실행하면 설치되는 유일한 항목은foo .

이전에는 다양했습니다. 종속성이 오래된 경우 " go install"도 모든 종속성을 설치했습니다.
" go install" 동안 종속성을 암시 적으로 설치하면 사용자에게 많은 혼란과 골칫거리가 발생했지만 이전에는 증분 빌드를 활성화해야했습니다.
더 이상은 아닙니다.
우리는 새로운 " install what I said"의미론이 훨씬 더 이해하기 쉬울 것이라고 생각합니다. 특히 많은 사용자가 이미 예상했던 버그 보고서에서 분명하기 때문입니다.
" go install" 동안 종속성을 강제로 설치하려면go install -i " go build -i"및 " go test -i" 유사하게 새 " "를 사용하십시오 .

" go install"이 (가) 다시 빌드 된 종속성을 설치하는 데 사용 되었다는 사실은 " "을 -a(를) 의미 하는와 함께 가장 자주 혼동을 일으켰습니다 force rebuild of all dependencies.
이제 " go install -a myprog"는 자신 myprog뿐만 아니라 의 모든 종속성을 완전히 다시 빌드 myprog하지만 myprog설치 만 수행 합니다. (물론 다시 빌드 된 모든 종속성은 여전히 ​​빌드 캐시에 저장됩니다.)
이전보다 종속성을 더 자주 다시 빌드해야하는 좋은 이유를 확인하기 때문에이 사례를 더 이해하기 쉽게 만드는 것은 새로운 콘텐츠 기반 부실 성 분석과 함께 특히 중요합니다. , "내 종속성이 설치되는 이유"혼동이 증가했을 것입니다.
예를 들어 " go install -gcflags=-N myprog" 를 실행 하면myprog컴파일러 최적화없이 빌드되었지만 더 이상 myprog컴파일러 최적화없이 표준 라이브러리에서 패키지 사용을 다시 설치하지 않습니다 .

참고 URL : https://stackoverflow.com/questions/30612611/what-does-go-build-build

반응형