go 설치(https://golang.org/dl/) 는 그냥 다운 받아서 설치하면 되는 것이라 큰 문제 없었다. 그리고 당연히 vscode 에는 go lang 관련 확장을 설치(https://code.visualstudio.com/docs/languages/go) 해야 하는데 이것도 큰 문제 없었다.
go 가 설치되면 자동으로 설정되는 환경 변수가 있는데, go 가 설치되어 있는 경로에 GOROOT 이라는 경로가 설정된다. 그리고 GOPATH 라는 환경변수에 go get 으로 설치하는 패키들이 설정된다.
이 문서에 따르면 모든 Go 코드를 단일 workspace 에서 관리한다고 한다. 이게 이해하기 힘든 구조이다. 모든 프로젝트가 같은 패키지들을 공유한다는게 좀 그렇다. 사용해야만 하는 패키지 버전이 있는데, 그 버전을 선택하지 못한다는게 나에게는 납득하기 힘든 구조이다. (물론 virtualenv 가 나오기 전 python 도 이랬긴 했다. )
그래서 virtualenv 같은게 있는지 찾아 봤는데, https://github.com/GetStream/vg 라는 프로젝트가 있다. 그런데 윈도우즈에서 어떻게 사용해야 하는지는 잘모르겠다.
그래서 여러 방법을 생각하다, GOPATH 는 환경변수라서 환경변수를 어떻게든 사용할 수 있을까라는 생각을 했다. 그리고 vscode go 확장 옵션 중 inferGopath 라는 옵션이 있다. 이 옵션을 키면 Gopath 값을 현재 workspace 로 덮어쓰는 기능이 있다. 그래서 아래와 같이 .vscode/settings.json 을 구성하게 되었다.
===== settings.json ====
{
"go.gopath": "${workspaceFolder}", // gopath 설정을 vscode 의 workspace 로 한다.
"go.inferGopath": true, // 이 옵션을 켜야 위의 설정이 먹히는 것 같다.
"terminal.integrated.env.windows": {
"GOPATH": "${workspaceFolder}" // windows 에서 vscode 프로그램 내 터미널을 GOPATH 환경 변수 변경
},
"terminal.integrated.env.osx": {
"GOPATH": "${workspaceFolder}" // osx 에서 vscode 프로그램 내 터미널을 GOPATH 환경 변수 변경
},
}
=======
대신 패키지를 설치하기 위해서는 꼭 vscode 프로그램 내 터미널을 사용해야 한다.
그러나 이렇게 하면 독립적인 환경을 구축할 수는 있는데, workspace 를 git 그대로 설정하게 되면 패키지들도 git에 포함될 수 있다. gitignore 를 잘 설정해야 할 것 같다.
그리고 패키지를 이렇게 수동으로 설정해야 하는지 잘모르겠다. python 처럼 requirements.txt 파일로 pip 로 빠르게 설지하면 좋을 것 같은데, 아직 이런 방법은 잘 모르겠다.