Skip to content

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를 수정할 필요가 없음.

프로젝트 초기 세팅

  1. 프로젝트 디렉토리 생성:
mkdir my-go-project
cd my-go-project
  1. 모듈 초기화:
go mod init github.com/yourusername/my-go-project
  1. main.go 파일 생성:
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}
  1. 프로그램 실행:
go run main.go
  1. 빌드 (선택사항):
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: 임시 빌드 디렉토리를 설정함.