환경 변수
- GOROOT : Go가 실제로 설치된 경로, go 관련된 실행파일, SDK가 위치
- GOPATH: go 언어로 된 프로젝트를 사용하거나 사용할 워킹 디렉토리를 가리키는 환경변수를 말한다. 기본적으로 3개의 폴더를 가진다.
- src : 내가 작성한 프로젝트 소스 코드가 위치
- bin : go install로 컴파일이 완료된 바이너리 파일이 저장될 위치
- pkg: 외부 패키지의 컴파일이 끝난 오브젝트 파일들이 저장될 위치
- +) 1.16버전 이후부터 기본적으로 gopath가 아닌 module 을 사용하게 변경되었다. 따라서 GOPATH 와 상관없이 아무 위치에서나 자신의 소스파일을 작성할수 있으며 모듈을 사용하기 위한 go.mod 파일도 반드시 필요하다.
- GO111MODULE : go가 package들을 어떻게 import할지 결정하는 환경 변수. version에 따라 의미가 달라지기 때문에 버전에 따라서 설정을 잘 확인해야한다. 1.16이후로 디폴트 방식이 on으로 변경되었다.
- off : 빌드 중에 $GOPATH에 있는 패키지를 사용함
- on: 빌드 중에 $GOPATH에 있는 패키지가 아닌 모듈에 있는 패키지 (go. mod)를 사용함.
- auto : 현재 디렉터리가 $GOPATH 외부에 있고 go.mod 파일이 포함된 경우 모듈을 사용하고 그렇지 않으면 $GOPATH의 패키지를 사용합니다.
명령어
go install
//컴파일이 완료된 실행가능한 바이너리 파일은 GOBIN 환경변수 경로에 생성하는 명령어
//즉 $GOBIN ($GOPATH/bin)위치에 생성 ($GOBIN의 경우 $GOPATH/bin에 설정하는게 국룰)
go build
// 컴파일이 완료된 실행가능한 바이너리 파일은 현재 폴더에 생성하는 명령어 ex).tm
// 뒤에 조건을 줘 위치를 지정할 수도 있다.
// 리눅스,맥은 ./hello, 윈도우는 hello.exe형태의 실행파일 형태로 생긴다.
go run
//프로그램을 컴파일하고 실행한다. 그리고 끝나면 컴파일된 코드를 버린다.
go get
//패키지 및 관련 종속성(dependency)를 다운로는 및 설치하는 명령어
//$GOPATH/src/<import-path>에 배치하고, 컴파일된 파일들이 $GOPATH/pkg에 저장된다.
//1.17이후로 deprecated 되어
//이후의 go get은 패키지를 단일 레포지터리에 다운로드하면서 현재 모듈의 의존성 조정에만 쓰인다.
go get [module-name]
//특정 모듈을 다운로드하는 명령어
go env
//go 환경변수 확인 가능
go mod vendor
//vendor directory를 생성해 의존성 패지키를 다운로드한다.
//원래 module 을 이용하면 project밑에 저장하지 않고, GOPATH에 저장한다.
//그러나 자신이 이용하던 모듈들을 repo에 넣고 싶을 경우가있다. 이때 자신이 사용하는 모듈들을 전부 repo안의 vendor폴더 안에 복사를 한다.
파일
- go.mod : 모듈은 종속성 관리를 위해 golang이 지원하는 것이다. golang의 의존성 관리의 핵심이다. 해당 파일에는 모듈 이름과 go버전, 그리고 외부 패키지의 버전이 함께 표시된다 이떄 외부 패키지에 indirect가 붙으면 직접적으로 사용되지 않았지만, 사용하고 있는 외부 패키지에 import 되어 있는 의존성 패키지이다. 또한 이 go.mod 파일이 있는 곳이 패키지의 루트 경로가 된다. 모듈과 패키지는 1대 N 이다.
- go.sum : go.mod에 종속성 정보가 추가될 때 생성된다. 외부 패키지를 포함해 빌드를 하고나면 go.sum 파일이 생성된다. go.sum은 외부 패키지의 버전에 대한 checksum을 모아둔 파일이다.