Updated:

4 minute read

개요

Go 개발에 사용되는 핵심 명령어들을 카테고리별로 정리합니다. 모든 명령어는 go help <command>로 상세 도움말을 확인할 수 있습니다.


프로젝트 관리

go mod - 모듈 관리

Go Modules를 관리하는 핵심 명령어

# 새 모듈 초기화
go mod init <module-name>

# 의존성 추가 및 정리
go mod tidy

# 의존성을 vendor 디렉토리로 복사
go mod vendor

# go.mod 검증
go mod verify

# 의존성 그래프 출력
go mod graph

# 의존성을 특정 버전으로 변경
go mod edit -require=example.com/pkg@v1.2.3

# 의존성 다운로드
go mod download

주요 파일

  • go.mod: 모듈 정의 및 의존성 목록
  • go.sum: 의존성 체크섬 (보안 검증용)

go get - 패키지 다운로드 및 관리

# 패키지 추가 (go.mod 업데이트)
go get example.com/pkg

# 특정 버전 설치
go get example.com/pkg@v1.2.3

# 최신 버전으로 업그레이드
go get example.com/pkg@latest

# 패키지 제거
go get example.com/pkg@none

# 모든 의존성 업그레이드
go get -u ./...

# 마이너/패치 버전만 업그레이드
go get -u=patch ./...


빌드 및 실행

go build - 컴파일

# 현재 디렉토리 빌드 (실행 파일 생성)
go build

# 특정 파일 빌드
go build main.go

# 출력 파일명 지정
go build -o myapp

# 크로스 컴파일 (Linux용 바이너리)
GOOS=linux GOARCH=amd64 go build

# 바이너리 크기 최소화
go build -ldflags="-s -w"

# 빌드 태그 사용
go build -tags=prod

# 상세 빌드 정보 출력
go build -v

# 레이스 감지기 활성화 (동시성 버그 탐지)
go build -race

주요 플래그

  • -o: 출력 파일명
  • -ldflags: 링커 플래그
  • -tags: 빌드 태그
  • -race: 레이스 감지기
  • -trimpath: 바이너리에서 파일 경로 제거

go run - 빌드 없이 실행

# 파일 실행
go run main.go

# 여러 파일 함께 실행
go run main.go utils.go

# 패키지 실행
go run .

# 인자와 함께 실행
go run main.go arg1 arg2

# 빌드 태그와 함께 실행
go run -tags=dev main.go

go install - 설치

# 현재 패키지를 $GOPATH/bin 또는 $GOBIN에 설치
go install

# 특정 패키지 설치
go install example.com/cmd/tool@latest

# 특정 버전 설치
go install example.com/cmd/tool@v1.2.3


코드 품질

go fmt - 코드 포맷팅

# 파일 포맷팅
go fmt main.go

# 현재 패키지 포맷팅
go fmt

# 모든 하위 패키지 포맷팅
go fmt ./...

# 변경 사항만 출력 (실제 변경 안 함)
gofmt -l .

# 간소화된 코드 제안
gofmt -s main.go

go vet - 정적 분석

# 현재 패키지 분석
go vet

# 모든 하위 패키지 분석
go vet ./...

# 특정 검사만 실행
go vet -composites=false ./...

검사 항목: 잘못된 printf 호출, 구조체 태그 오류, unreachable code 등

go test - 테스트

# 현재 패키지 테스트
go test

# 모든 하위 패키지 테스트
go test ./...

# 상세 출력
go test -v

# 특정 테스트만 실행
go test -run TestFunctionName

# 커버리지 측정
go test -cover

# 커버리지 HTML 리포트 생성
go test -coverprofile=coverage.out
go tool cover -html=coverage.out

# 벤치마크 실행
go test -bench=.

# 레이스 감지 테스트
go test -race

# 짧은 테스트만 실행
go test -short

# 타임아웃 설정
go test -timeout 30s

# 병렬 실행 수 지정
go test -parallel 4


문서 및 정보

go doc - 문서 조회

# 패키지 문서
go doc fmt

# 함수/타입 문서
go doc fmt.Println

# 메서드 문서
go doc http.Client.Get

# 모든 문서 출력
go doc -all fmt

# 소스 코드 포함
go doc -src fmt.Println

go list - 패키지 정보

# 현재 패키지 정보
go list

# 모든 하위 패키지 나열
go list ./...

# 의존성 나열
go list -m all

# JSON 형식으로 출력
go list -json

# 특정 필드만 출력
go list -f '{{.Dir}}' ./...

# 빌드 제약 조건 확인
go list -tags=prod ./...

go version - 버전 정보

# Go 버전 출력
go version

# 바이너리의 빌드 정보 확인
go version <binary-file>

# 모듈 버전 정보
go version -m <binary-file>

go env - 환경 변수

# 모든 환경 변수 출력
go env

# 특정 변수 출력
go env GOPATH GOROOT

# 환경 변수 설정
go env -w GOPRIVATE=github.com/mycompany

# 환경 변수 초기화
go env -u GOPRIVATE


진단 및 최적화

go tool - 도구 실행

# 프로파일링
go tool pprof cpu.prof
go tool pprof -http=:8080 cpu.prof

# 커버리지 분석
go tool cover -html=coverage.out

# 컴파일러 최적화 확인
go tool compile -S main.go

# 어셈블리 코드 생성
go tool compile -N -l -S main.go

go generate - 코드 생성

# 코드 생성 명령 실행 (//go:generate 주석 기반)
go generate

# 특정 파일만 처리
go generate main.go

# 모든 하위 패키지 처리
go generate ./...

go work - 워크스페이스 관리 (Go 1.18+)

# 워크스페이스 초기화
go work init ./module1 ./module2

# 모듈 추가
go work use ./module3

# 워크스페이스 동기화
go work sync


정리 및 캐시

go clean - 정리

# 빌드 파일 정리
go clean

# 테스트 캐시 정리
go clean -testcache

# 모듈 캐시 정리
go clean -modcache

# 모든 캐시 정리
go clean -cache

# 특정 패키지 정리
go clean -i example.com/pkg


유용한 조합

개발 워크플로우

# 1. 프로젝트 시작
go mod init myproject

# 2. 의존성 추가
go get -u github.com/gin-gonic/gin

# 3. 개발 중 실행
go run main.go

# 4. 테스트
go test -v ./...

# 5. 코드 정리
go fmt ./...
go vet ./...

# 6. 빌드
go build -o myapp

CI/CD 파이프라인

# 의존성 다운로드
go mod download

# 포맷 검사
test -z $(gofmt -l .)

# Lint
go vet ./...

# 테스트 (커버리지 포함)
go test -race -coverprofile=coverage.out ./...

# 빌드
go build -ldflags="-s -w" -o app


환경 변수

주요 Go 환경 변수:

  • GOROOT: Go 설치 경로
  • GOPATH: 워크스페이스 경로 (기본: ~/go)
  • GOBIN: 실행 파일 설치 경로
  • GOOS: 타겟 운영체제
  • GOARCH: 타겟 아키텍처
  • CGO_ENABLED: cgo 활성화 여부
  • GOPRIVATE: 비공개 모듈 패턴
  • GOPROXY: 모듈 프록시 (기본: https://proxy.golang.org)
  • GOSUMDB: 체크섬 데이터베이스


참고 자료