[Go] go 명령어
개요
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: 체크섬 데이터베이스