golang
TL;DR⚑
- Go 프로젝트 시작 시 모듈 시스템 활용이 중요
- gvm이나 goenv를 사용하여 Go 버전과 GOROOT를 쉽게 관리할 수 있음
Go 버전 관리⚑
-
gvm (Go Version Manager) 사용:
- 설치:
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
- 버전 설치:
gvm install go1.21.0
- 버전 사용:
gvm use go1.21.0
- GOROOT 관리: gvm이 자동으로 GOROOT를 설정함.
- 설치:
-
goenv 사용:
- 설치:
git clone https://github.com/syndbg/goenv.git ~/.goenv
- PATH 설정:
export PATH="$HOME/.goenv/bin:$PATH"
- 버전 설치:
goenv install 1.21.0
- 버전 사용:
goenv global 1.21.0
- GOROOT 관리: goenv가 자동으로 GOROOT를 설정함.
- 설치:
참고: gvm과 goenv 모두 Go 버전을 변경할 때 자동으로 적절한 GOROOT를 설정함. 사용자가 직접 GOROOT를 수정할 필요가 없음.
프로젝트 초기 세팅⚑
- 프로젝트 디렉토리 생성:
mkdir my-go-project
cd my-go-project
- 모듈 초기화:
go mod init github.com/yourusername/my-go-project
- main.go 파일 생성:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
- 프로그램 실행:
go run main.go
- 빌드 (선택사항):
go build -o myapp
./myapp
주요 환경변수⚑
- GOROOT: Go 설치 디렉토리를 가리킴.
- gvm 또는 goenv 사용 시 자동으로 관리됨.
- 수동 설치 시 사용자가 직접 설정해야 함 (예:
/usr/local/go
). go env GOROOT
명령어로 현재 GOROOT 확인 가능.
- GOPATH: Go 작업 공간의 위치를 지정함 (선택적).
- GO111MODULE: 모듈 모드 활성화 여부를 제어함.
- GOPROXY: 모듈 다운로드 프록시 서버를 설정함.
- GOSUMDB: 체크섬 데이터베이스 URL을 지정함.
GOPATH의 역할 변화⚑
- 과거: 필수적이었으며, 모든 Go 코드와 의존성을 저장했음.
- 현재: 모듈 시스템으로 인해 중요성이 감소함.
- 현재 용도:
- go get으로 다운로드한 패키지의 기본 저장 위치임.
- GOPATH/bin에 go install로 설치된 바이너리 저장함.
- 레거시 프로젝트나 GOPATH 모드 작업 시 사용함.
- 권장사항: 새 프로젝트는 모듈 모드 사용을 권장함.
모듈 관리⚑
- go.mod: 프로젝트의 의존성을 정의함.
- go get: 필요한 패키지를 다운로드하고 설치함.
- go mod tidy: 사용하지 않는 의존성을 제거함.
- go mod vendor: 벤더링을 통해 의존성을 로컬에 저장함.
개발 환경 최적화⚑
- GOFLAGS: 빌드 플래그를 설정함.
- GOCACHE: 빌드 캐시 위치를 지정함.
- GOENV: 환경 설정 파일의 위치를 변경함.
- GOTMPDIR: 임시 빌드 디렉토리를 설정함.