[Go 공식문서 한국어 정리] ⓪23. go 명령어 이해하기
[Go 공식문서 한국어 정리] ⓪23. go 명령어 이해하기
원문 제목: About the go command
작성자: Go Team
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Go 명령어(go command)는 패키지 다운로드, 빌드, 설치, 테스트를 자동화하는 도구입니다.
이 문서는 왜 새로운 명령어를 만들었는지, 무엇이며 어떻게 사용하는지 설명합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 2. 핵심 개념
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① 동기
Go의 목표는 소스 코드 자첻만으로 빌드할 수 있는 언어였습니다.
makefile이나 별도 설정 없이 import 문만으로 빌드가 가능해야 했습니다.
이상을 실현하기 위해 go 명령어를 개발했습니다.
② 설정 대신 규약
복잡한 설정 없이 규약(convention)으로 시스템을 단순화합니다.
- import 경로는 소스 코드 URL에서 유추
- 로컬 파일 시스템의 저장 위치는 import 경로에서 유추
- 소스 트리의 각 디렉토리는 단일 패키지에 대응
- 패키지는 소스 코드의 정볻만으로 빌드
③ GOPATH 구조
$GOPATH/src/<import-path>에 소스 저장
bin/: 컴파일된 실행 파일
pkg/: 컴파일된 패키지
src/: 소스 파일
④ 주요 서브커맨드
go get: 패키지 다운로드 및 설치
go list: 패키지 목록
go test: 테스트 실행
go install: 패키지 설치
go build: 빌드
go generate: 소스 파일 생성 자동화
⑤ 한계
go 명령어는 범용 빌드 도구가 아닙니다.
Go 패키지만 빌드할 수 있으며, 설정을 변경할 수 없습니다.
고급 빌드 설정이 필요하면 makefile 등을 사용해야 합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
초기 Go 개발에서는 편의를 위해 makefile을 사용했습니다.
하지만 최종 목표는 소스 코드만으로 빌드하는 것이었습니다.
import 경로는 github.com/golang/glog과 같이 URL에서 직접 유추됩니다.
이를 통해 도구가 익숙하지 않은 import 경로를 보고도 소스 코드를 어디서 가져올지 알 수 있습니다.
$GOPATH는 기본적으로 $HOME/go입니다.
go get으로 설치한 패키지는 자동으로 src/ 아래에 배치되고,
bin/과 pkg/에 컴파일 결과가 저장됩니다.
go test ./...는 현재 디렉토리 및 모든 하위 패키지의 테스트를 실행합니다.
go install은 의존성 그래프를 분석하여 최신 버전만 재빌드합니다.
go generate는 빌드 중이 아닌 빌드 전에 소스 파일을 생성하는 자동화 도구입니다.
실제 빌드 과정에서 소스를 생성하는 것은 go 명령어의 범위를 벗어납니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 4. 실전 활용 / 예시
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
새로운 패키지가 필요하면 go get으로 즉시 설치합니다.
CI/CD 파이프라인에서 go test ./...로 전체 테스트를 실행합니다.
go generate로 protocol buffer나 mock 파일을 자동 생성합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
go 명령어는 설정 없이 소스 코드만으로 빌드하는 Go의 철학을 구현합니다.
규약 기반 접근으로 생태계를 단순하고 강력하게 만듭니다.
Go 패키지 빌드에 특화되어 있으며, 범용 빌드 도구는 아닙니다.
📎 출처 링크
https://go.dev/doc/articles/go_command.html
#Go #Golang #gocommand #build #공식문서

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30