답변:
어떤 go
명령을 수행하는 것은 우리가 "정상"패키지 실행 여부에 특수에 대한 의존 "main"
패키지로 제공된다.
패키지 용
go build
패키지를 빌드 한 다음 결과 를 버립니다 .go install
그런 다음 builds 는$GOPATH/pkg
디렉토리에 패키지 를 설치 합니다 .명령 (패키지 main
)
go build
명령을 빌드하고 결과를 현재 작업 디렉토리 에 둡니다 .go install
임시 디렉토리에 명령을 빌드 한 다음 $GOPATH/bin
.go build
합니까?빌드하려는 패키지에 패키지 를 전달할 수 있습니다 go build
. .go
단일 디렉토리에서 파일 목록을 전달할 수도 있으며 , 이는 단일 패키지를 지정하는 소스 파일 목록으로 처리됩니다.
패키지 (가져 오기 경로)가 제공되지 않으면 빌드가 현재 디렉터리에 적용됩니다.
가져 오기 경로에는 하나 이상의 "..."
와일드 카드 (이 경우 패턴 ) 가 포함될 수 있습니다 . ...
모든 문자열과 일치 할 수 있습니다. 예를 들어 패키지와 하위 폴더에있는 패키지를 net/...
일치시킵니다 net
. 명령
go build ./...
현재 폴더에 패키지를 빌드하는 데 자주 사용되며 모든 패키지가 다시 반복됩니다. 프로젝트 루트에서 실행 된이 명령은 전체 프로젝트를 빌드합니다.
패키지 지정에 대한 자세한 내용은 go help packages
.
Go 모듈에 대한 예비 지원은 Go 1.11에서 도입되었으며 모듈은 Go 1.13부터 기본이되었습니다. 때 go
도구 A A이 들어있는 폴더에서 실행 go.mod
파일 (또는 현재 폴더의 부모 중 하나)에 go
있는 도구가 실행 모듈 인식 모드 (레거시 모드라고 GOPATH 모드 ).
모듈 인식 모드에서 GOPATH는 빌드 중에 가져 오기의 의미를 더 이상 정의하지 않지만 다운로드 된 종속성 (GOPATH / pkg / mod에 있음) 및 설치된 명령 (GOBIN이 설정되지 않은 경우 GOPATH / bin에 있음)을 계속 저장합니다.
모듈을 빌드 할 때 빌드 되는 것은 빌드 목록에 의해 지정됩니다 . 빌드 목록은 처음에 기본 모듈 ( go
명령이 실행 되는 디렉토리를 포함하는 모듈) 만 포함 하고 기본 모듈의 종속성이 재귀 적으로 빌드 목록에 추가됩니다 (종속성 종속성도 추가됨).
자세한 내용은 go help modules
.
기본적으로 go build
패키지를 빌드 할 수 있는지 (종속성과 함께) 확인하는 동시에 go install
.NET Framework의 적절한 폴더에 결과를 (영구적으로) 설치할 수 있습니다 $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 68116 및 CL 75473 덕분 입니다. 여기에서 참조하는 이 스레드를 참조하십시오.
go build
및go install
명령 이 정확히 무엇을 빌드 합니까?go 도구가 패키지 또는 바이너리를 설치할 때마다 종속 항목도 설치하므로 go install을 실행하면 프로그램이 의존하는 패키지 (공개적으로 사용 가능한 "go gettable"패키지)도 자동으로 설치됩니다.
실제로 ... go install
Go 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
컴파일러 최적화없이 표준 라이브러리에서 패키지 사용을 다시 설치하지 않습니다 .
go build
, 어떻게 get
들? 빌드 오류가 cannot find package "github.com/spf13/cobra" in any of:…
있습니다. 나는 그것을 얻기 위해 그것을 말하는 방법을 모른다. 명시 적으로 받아야합니까?
go.mod
파일이 있습니까?
go version go1.11.4 linux/amd64
. 나는 go.mod에 대해 모른다. 저는 다시 https://github.com/cbroglie/mustache/blob/master/cmd/mustache/main.go
빌드하고 있습니다. 방금 전체 패키지를 빌드하고이 예제를 기반으로 사용하고 있으며 작동하는보다 기본적인 버전을 만들었습니다 (이 라이브러리를 사용하지 않음). 콧수염 패키지로 어떻게 설치되지 않았는지 알 수 없습니다.