go 설치(https://golang.org/dl/) 는 그냥 다운 받아서 설치하면 되는 것이라 큰 문제 없었다. 그리고 당연히 vscode 에는 go lang 관련 확장을 설치(https://code.visualstudio.com/docs/languages/go) 해야 하는데 이것도 큰 문제 없었다. 

 go 가 설치되면 자동으로 설정되는 환경 변수가 있는데, go 가 설치되어 있는 경로에 GOROOT 이라는 경로가 설정된다. 그리고 GOPATH 라는 환경변수에 go get 으로 설치하는 패키들이 설정된다.

https://github.com/golang-kr/golang-doc/wiki/Go-%EC%BD%94%EB%93%9C%EB%A5%BC-%EC%9E%91%EC%84%B1%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

 

golang-kr/golang-doc

Korean Translation of golang.org/doc. Contribute to golang-kr/golang-doc development by creating an account on GitHub.

github.com

이 문서에 따르면 모든 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 로 빠르게 설지하면 좋을 것 같은데, 아직 이런 방법은 잘 모르겠다.