GOPATH 개론
go 언어를 다루다보면, 주로 처음 접하게 되면, 다른 언어와 다르게, go는 특정 디렉토리에서만 개발을 해야됩니다.
외부 패키지를 관리하기 위함인데요. 다른 언어처럼 아무 디렉토리에서나 개발할 수는 없습니다. 물론 GOPATH로 희망하는 디렉토리를 선정할 수는 있지만, 모든 go 프로그램은 해당 디렉토리 밑에 위치해야 합니다.
즉, ~/dev/project1 이나, ~/dev/project2 이런식으로 다른 디렉토리에 넣을 수는 없습니다.
현재 GOPATH를 확인하는 방법은
go env | grep GOPATH
라고 입력하면 됩니다.
만약 GOPATH를 임의로 지정하지 않으면, OS에 따라, 기본 폴더를 GOPATH로 지정합니다.
맥과 같은 리눅스 계열의 경우, ~/go 를 GOPATH로 지정합니다. 사용자 디렉토리 밑의 go 폴더입니다.
go는 import 를 통해 가져올 패키지를 GOPATH에서 찾습니다.
커스텀 GOPATH는 이 아티클을 참고해서 설정할 수 있지만, 기본값을 사용하는 것을 권장합니다.
GOPATH의 구조
GOPATH에는 3개의 폴더가 존재합니다. go는 소스코드를 찾을 때, GOPATH를 검색합니다.
src 디렉토리
가장 쉽게 이해할 수 있는 소스코드를 넣는 디렉토리입니다.
src 폴더 밑에 자신의 코드를 넣고 개발하면 됩니다. 그런데, 나중에 다른 곳에서 import 하는 것을 고려하여, 일반적으로 github.com/<id>/<name> 형식으로 폴더를 만듭니다. 그러면, 다른 패키지와 중복이 발생할 일이 없기 때문입니다. golang 이 갖는 독특한 패키지 관리 방식입니다.
import 할때, src 바로 밑에 있는 폴더에서만 임포트를 할 수 있습니다. 예를 들어, src/a 라는 폴더에서는 src/b 의 코드를 import 할 수 없습니다. 그러나, src/a/z 에서 src/a/x 의 소스를 임포트 할 수 있습니다.
pkg 디렉토리
설치된 오브젝트가 보관되는 곳입니다.
만약 src 디렉토리에서 ~/go/src/foo/bar 와 같이 되어 있다면, 개발할 때, foo/bar 를 임포트 할 수 있습니다. 이때, 컴파일된 형태는 pkg 디렉토리에 설치됩니다.
bin 디렉토리
컴파일된 명령어가 저장됩니다. 저장될때는 마지막 접미사만 남고 저장됩니다. 따라서, PATH에 ~/go/bin을 포함한다면, 컴파일된 명령을 실행해 볼 수 있습니다.
여기에서 ~/go/bin 은 go가 설치된 GOROOT 와는 다른 개념입니다. go의 기본 명령어는 GOROOT에 설치되어 있고, 이곳 bin 디렉토리는 컴파일된 바이너리가 저장되는 곳입니다.
공급업체 디렉토리
directory 명칭이 ‘vendor’인경우, 좀 다르게 동작합니다. src 밑에 어느 폴더에 있던지, vendor 라는 디렉토리 하위 디렉토리는 vender 앞쪽의 디렉토리 구조를 개의치 않고 import 합니다. 예를 들어, ~/go/src/foo/vendor/wiz 와 같은 구조로 되어 있다면, wiz로 import 됩니다.
GOPATH 아무것도 아닌 것 같지만, 사실 모르고 사용하면 나중에 혼선이 있을 수 있으니, 여러 글을 찾아보면서 학습하면 좋을 것 같습니다.