Go언어

[GO언어] Go 환경 변수 및 버전 관리하기 (GOROOT, GOPATH)

아무일도없었다 2022. 10. 4. 17:19

[이 포스팅은 Windows 환경을 기준으로 작성하였습니다.]

 

 

GoLand 설치 이후 개발을 진행하던 도중 환경변수가 꼬이는 탓에 엄청난 삽질을 하고 결국 싹 밀고 다시 정리해서 해결하였다.

 

이 글을 통해 Windows 환경에서 여러 Go 언어 버전에 대한 관리와 GoLand 를 사용한 개발 시 GOROOT, GOPATH 와 같은 환경변수의 관리 및 정리를 기록하려고 한다.

 

 


 

GOROOT 


java 에 비유하자면 JAVA_HOME 같은 환경변수로 Go SDK 를 설치한 경로를 지정하는 환경변수이다.

 

Windows 에서 Go 를 설치하면 기본으로 C:\Program Files\go 경로에 설치가 되고 동시에 기본 GOROOT 의 경로가 된다.

 

 

 

GOPATH


개발하는 Go 프로젝트에서 import 할 모듈들이 설치 및 관리되는 경로를 지정하는 환경변수이다.

 

GoLand 에서는 시스템 환경 변수에 지정된 GOPATH 외에 자체적으로 프로젝트 별로 GOPATH 를 관리할 수도 있는 기능이 있기 때문에 여러 프로젝트를 진행하는 경우 깔끔한 관리를 하기에 용이하다.

 

 

 

 

문제점


프로젝트마다 Go 버전이 다르고 각 프로젝트별로 사용하는 모듈과 패키지들이 늘어나면서 초기에 셋팅한 환경변수에 문제가 생긴 것을 알게 되었다. (권한 문제 + 프로젝트가 분리되면서 기존에 사용하던 의존성 패키지들이 제대로 연동이 안 되는 문제가 발생)

 

여러 고생을 하다가 다시 처음부터 하는 마음으로 모든 Go SDK 를 삭제하고 패키지들을 삭제하였고 환경변수들도 다시 잡기 시작하였다.

 

 

 

해결 과정


 

"Go 버전 관리를 어떻게 하면 쉽고 간단하게 할 수 있을까?" 


 

Windows 환경에서 Go SDK 를 직접 설치하면 기본으로 C:\Program Files\go 경로에 설치가 되지만 GoLand 를 통해 SDK 를 설치하면 %USERPROFILE%\go 경로에 설치가 된다.

 

Go SDK 버전이 점차 늘어났고 Go SDK 의 설치 경로가 분리되면서 GoLand 가 GOROOT 를 관리해주지만 정작 사용자 입장에서 GOROOT 의 폴더가 분리된 꼴이 되었다.

 

이를 해결하고자 기본 GOROOT 경로를 C:\Program Files\go 로 잡았더니 GoLand 에서 접근은 가능하지만 새로운 버전의 SDK 를 설치할 때 권한 문제로 인해 계속 실패하는 문제가 발생하였다.

 

이를 위해 Go SDK 경로를 %USERPROFILE%\go 로 통일하였고 GOROOT 환경 변수는 GoLand 에 모두 넘기고 시스템 환경 변수에서는 삭제하기로 하였다.

 

추가로 버전에 대한 확장성을 높이기 위해 설치되는 GOROOT 폴더의 구조를 아래와 같이 구성하였다.

(%USERPROFILE%\go 경로에서 go%version% 의 네이밍을 사용한 구조 -> [ex] 1.19.1 버전의 경우 go1.19.1 )

 

%USERPROFILE%\go 경로 (=GOROOT)

 

 

이러한 경로를 구성해놓으면 GoLand 를 통해 Go SDK 버전 관리 및 스위칭이 매우 편리해지는 장점이 있다.

(GoLand 를 통해 SDK 설치 시 go1.19.1 과 같은 네이밍을 자동으로 붙여준다.)

 

GoLand 를 통한 SDK 버전 스위칭

 

GoLand 를 통한 SDK 버전 추가

 

 


 

 "GOPATH 관리에 대한 편의성" 


GOPATH 또한 GoLand 에서 프로젝트 단위로 관리가 가능하기 때문에 큰 문제는 없었지만 자동으로 bin 을 잡아주지 않았고 초반에 많은 삽질로 인해 GOPATH 를 프로젝트별로 잡은 것이 문제였다.

 

또한 GOROOT 와 GOPATH 가 겹치면서 구조가 헷갈리게 꼬여버리면서 어떻게 하면 더 직관적으로 관리할 수 있을까 고민해보았다.

 

%USERPROFILE%\go 경로가 GOROOT 로 잡힌 상황에서 동일한 경로를 GOPATH 로 잡으면 추후에 관리가 힘들어질 것으로 판단하고 %USERPROFILE%go 경로 밑에 gopath 라는 폴더를 새로 만들어서 GOPATH 로 설정하였다.

 

그 결과 아래와 같은 환경으로 다시 구축하였고 큰 문제가 생기지 않는 이상 현재의 구조를 계속 유지하려고 한다.

 

우선 GoLand 와는 별개로 GOPATH 는 시스템 환경 변수에 추가를 하였다. (시스템 변수 X, 사용자 변수 O)

 

사용자 변수에 GOPATH 추가

 

추가로 사용자 변수에 있는 path 에 다음과 같이 추가하였다.

 

사용자 변수 path 에 %GOPATH%\bin 추가

 

이후 GoLand 를 재기동하고 File -> Settings -> Go -> GOPATH 에 들어가 보면 아래와 같이 Global GOPATH 가 잡힌 것을 확인할 수 있다.

 

Global GOPATH 확인

 


 

여기까지 환경이 구성이 됐다면 GoLand 의 어떤 터미널에서 go package 를 install 해도 동일하게 모든 프로젝트에서 사용할 수 있는 환경이 준비된 것이다. 

 

또한 Go SDK 는 프로젝트 별로 GoLand 내부에서 직접 설치 및 스위칭을 할 수 있어서 매우 편리한 개발을 할 수 있게 되었다.

반응형