[Golang] goenv를 사용하여 여러 버전의 Golang 사용하기

[Golang] goenv를 사용하여 여러 버전의 Golang 사용하기

2023-04-14 hit count image

goenv를 사용하여 하나에 머신에서 여러 버전의 Golang을 사용하는 방법에 대해서 알아보겠습니다.

개요

Golang으로 여러 프로젝트를 진행하다보면, 다양한 버전의 Golang을 하나의 머신(PC)에서 사용해야할 때가 있습니다.

이번 블로그 포스트에서는 하나의 머신(PC)에서 여러 버전의 Golang을 사용하기 위해 goenv를 설치하고 사용하는 방법에 대해서 알아보도록 하겠습니다.

goenv

goenvPythonpyenv, Rubyrbenv와 같이 하나의 머신에서 여러 버전의 Golang을 사용할 수 있게 하는, Go Version Management입니다.

이번 블로그 포스트는, macOS에서 goenv를 설치하고 사용하는 방법에 대해서 알아보도록 하겠습니다. macOS에서 Golang을 설치하고 실행하는 방법에 대해서는 아래에 링크를 참고하시기 바랍니다.

goenv 설치

다음 명령어를 실행하여 macOS에서 goenv를 설치합니다.

brew install goenv

설치가 완료되었다면, 다음 명령어를 실행합니다.

goenv --version

문제없이 설치가 되었다면, 다음과 같이 goenv의 버전을 확인할 수 있습니다.

goenv 2.0.6

goenv 설정

설치가 완료되었다면, 문제없이 goenv를 사용하기 위해 .zshrc 파일을 열고 다음과 같이 수정합니다.

...
# go
export GOROOT="$(brew --prefix golang)/libexec"
export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
export PATH="$GOROOT/bin:$PATH"
export PATH="$PATH:$GOPATH/bin"
alias go=~/.goenv/shims/go

goenv version

다음 명령어를 실행하면, goenv로 현재 설정된 Golang 버전을 확인 할 수 있습니다.

goenv version

그럼 다음과 같이 goenv로 현재 설정된 Golang 버전을 확인할 수 있습니다.

system (set by /Users/dev-yakuza/.goenv/version)

goenv versions

다음 명령어를 실행하면, goenv를 사용하여 현재 머신에 설치한 Golang 버전을 확인할 수 있으며, 그 중에서 현재 선택된 버전이 무엇인지 확인할 수 있습니다.

goenv versions

그럼 다음과 같이 goenv로 설치한 Golang의 버전과 현재 설정된 Golang 버전을 확인할 수 있습니다.

* system (set by /Users/dev-yakuza/.goenv/version)

현재는 goenv를 사용하여 다른 버전의 Golang을 설치하지 않았으므로 기본 버전(system)만 표시되고, 기본 버전이 선택된 것을 확인할 수 있습니다.

goenv install –list

다음 명령어를 실행하면, 설치 가능한 Golang 버전을 확인할 수 있습니다.

goenv install --list

그럼 다음과 같이 Golang 버전을 확인할 수 있습니다.

...
1.19.5
1.19.6
1.20.0
1.20rc1
1.20rc2
1.20.1

goenv install

그럼 goenv를 사용하여 원하는 Golang 버전을 설치해 봅시다. 이번 블로그 포스트에서는 1.20.1 버전을 설치해보겠습니다. 새로운 Golang 버전을 설치하기 위해 다음 명령어를 실행합니다.

goenv install 1.20.1

그럼 다음과 같이 새로운 Golang 버전이 설치되는 것을 확인할 수 있습니다.

Downloading go1.20.1.darwin-amd64.tar.gz...
-> go1.20.1.darwin-amd64.tar.gz
######################################################################################################################## 100.0%
Installing Go Darwin 64bit 1.20.1...
Installed Go Darwin 64bit 1.20.1 to /Users/dev-yakuza/.goenv/versions/1.20.1

설치가 완료되었다면, 다음 명령어를 실행해 잘 설치가 되었는지 확인해 봅니다.

goenv versions

그럼 다음과 같이 1.20.1 버전의 Golang이 설치된 것을 확인할 수 있습니다.

* system (set by /Users/dev-yakuza/.goenv/version)
  1.20.1

goenv rehash

rehashgoenv에 새롭게 설치한 Golang 버전을 인식시킬 때 사용하는 명령어 입니다. 따라서, 새로운 버전의 Golang을 설치하였다면, 다음과 같이 rehash 명령어를 실행할 필요가 있습니다.

goenv rehash

goenv global

새롭게 설치한 1.20.1 버전의 Golang을 전역(Global)에서 사용하는 방법에 대해서 알아보겠습니다. 다음 명령어를 실행하여 새로운 Golang 버전을 기본 버전으로 설정합니다.

goenv global 1.20.1

다음 명령어를 실행하여, 새로운 버전의 Golang이 잘 설정이 되었는지 확인합니다.

go versions

그럼 다음과 같이 새로운 Golang 버전이 잘 설정된 것을 확인할 수 있습니다.

  system
* 1.20.1 (set by /Users/dev-yakuza/.goenv/version)

또한, 다음 명령어를 실행하여 현재 사용중인 Golang 버전을 확인할 수 있습니다.

goenv version

그럼 다음과 같이 Golang의 버전을 확인할 수 있습니다.

1.20.1 (set by /Users/dev-yakuza/.goenv/version)

물론, 기본적인 명령어로도 Golang의 버전을 확인할 수 있습니다.

go version

그럼 다음과 같이 Golang의 버전을 확인할 수 있습니다.

go version go1.20.1 darwin/amd64

goenv global로 설정된 버전은 기본 버전으로 설정됩니다. 따라서 터미널을 종료하고 다시 시작해도 항상 1.20.1 버전의 Golang이 사용되게 됩니다.

goenv shell

goenv shell은 해당 명령어를 실행한 터미널에서만 특정 버전의 Golang을 사용하도록 합니다.

goenv global과 차이를 확인하기 위해, 우선 다음 명령어를 실행하여 다른 Golang 버전을 설치합니다.

goenv install 1.19.6

설치가 완료되면, 다음 명령어를 실행하여 터미널에서만 해당 버전을 사용할 수 있도록 합니다.

goenv shell 1.19.6

이제 다음 명령어를 실행하여 Golang 버전이 잘 변경되었는지 확인합니다.

goenv versions

그럼 다음과 같이 Golang의 버전이 잘 변경된 것을 확인할 수 있습니다.

  system
* 1.19.6 (set by GOENV_VERSION environment variable)
  1.20.1

또한, 다음 명령어를 실행하여 현재 사용중인 Golang 버전을 확인할 수 있습니다.

goenv version

그럼 다음과 같이 Golang의 버전을 확인할 수 있습니다.

1.19.6 (set by GOENV_VERSION environment variable)

물론, 기본적인 명령어로도 Golang의 버전을 확인할 수 있습니다.

go version

그럼 다음과 같이 Golang의 버전을 확인할 수 있습니다.

go version go1.19.6 darwin/amd64

goenv shell은 해당 명령어를 실행한 터미널이 닫히면, 설정한 버전이 초기화되고, 기본 Golang 버전이 다시 설정됩니다. 즉, 터미널을 종료하고 다시 터미널을 열면, 앞에서 goenv global로 설정한 버전이 활성화됩니다.

goenv local

goenv local 명령어를 실행하면, 해당 명령어를 실행한 프로젝트(폴더)에서는 항상 해당 버전을 사용하게 됩니다. goenv local은 다음과 같이 사용할 수 있습니다.

goenv local 1.19.6

명령어를 실행하면 .go-version 파일이 생성되고, 1.19.6 버전이 기록된 것을 확인할 수 있습니다.

또한 다음 명령어를 실행하면 Golang의 버전이 1.19.6으로 잘 변경된 것을 확인할 수 있습니다.

goenv versions
goenv version
go version

.go-version 파일이 있는 폴더에서 터미널을 열면, goenv가 자동으로 해당 파일의 버전을 인식하여 해당 버전의 Golang을 선택합니다.

.go-version

goenv local에서 확인했듯이, .go-version 파일을 사용하면 각각의 프로젝트에 맞는 Golang의 버전을 관리할 수 있습니다. 다른 팀 멤버들과 Golang으로 프로젝트를 진행한다면, .go-version 파일을 생성하고 버전을 기록해 두면 큰 도움이 됩니다.

.go-version 파일에 기록된 버전이 현재 머신에 설치가 되지 않은 경우가 있을 수 있습니다. 이를 확인하기 위해 .go-version 파일을 다음과 같이 수정해 봅니다.

1.18.10

그리고 터미널을 종료시킨 후, 다시 열면 다음과 같은 에러 메시지를 확인할 수 있습니다.

goenv: version '1.18.10' is not installed (set by /Users/dev-yakuza/projects/temp/test/.go-version)

.go-version 파일에 기록된 Golang 버전이 아직 설치가 되지 않았기 때문에 에러가 발생하였습니다.

이런 경우, 다음 명령어를 실행하여 .go-version 파일에 기록된 버전을 설치하도록 합니다.

goenv install

그럼 다음과 같이 .go-version 파일에 기록된 Golang 버전이 설치되는 것을 확인할 수 있습니다.

Downloading go1.18.10.darwin-amd64.tar.gz...
-> go1.18.10.darwin-amd64.tar.gz
####################################################################################################################### 100.0%####################################################################################################################### 100.0%
Installing Go Darwin 64bit 1.18.10...
Installed Go Darwin 64bit 1.18.10 to /Users/dev-yakuza/.goenv/versions/1.18.10

또한, 다음과 같은 명령어를 실행하면 Golang 버전이 잘 변경된 것을 확인할 수 있습니다.

goenv versions
goenv version
go version

이를 통해, 프로젝트를 공동으로 개발하는 멤버들과 동일한 Golang 버전을 사용할 수 있도록 만들 수 있습니다.

완료

이것으로 하나의 머신에서 여러 Golang 프로젝트를 진행할 때, 각각의 프로젝트에 맞는 Golang 버전을 관리하기 위해 goenv를 설치하고 사용하는 방법에 대해서 알아보았습니다. Golang의 버전이 다른 여러 프로젝트를 동시에 진행중에 계신다면, goenv를 활용하여 Golang의 버전을 관리해 보시기 바랍니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

스무디 한 잔 마시며 끝내는 React Native 책을 출판한지 벌써 2년이 다되었네요.
이번에도 좋은 기회가 있어서 스무디 한 잔 마시며 끝내는 리액트 + TDD 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
Posts