go module
모듈
Go가 종속성을 관리하는 방식
# go module 생성
|
|
# go.mod 파일
모듈이 정의된 파일
- module 지시어
- 모듈의 정식 이름
- module의 경로 (module-path)
- 모듈 내의 모든 패키지에 대한 접두사 역할을 하는 경로
- go 지시어
- 이 모듈을 사용하는 데 필요한 최소 Go 버전을 설정
- require 지시어
- 모듈 종속성의 최소 요구 버전을 선언
- indirect 주석
- 직접 import 하지 않은 간접 종속성
# go commands
# go get
의존성 업데이트 (go.mod 파일 업데이트)
- 패키지 빌드나 설치는 하지 않음 (go version >= 1.18)
# go install
빌드 후 설치
- 설치 디렉토리
- 1순위:
GOBIN
- 2순위:
GOPATH/bin
(or GOPATH가 없을 경우$HOME/go/bin
) GOROOT
내 실행파일$GOROOT/bin
또는$GOTOOLDIR
에 설치
- 1순위:
- non-executable packages
- 빌드되고 캐시되지만 설치되진 않음
# go build
패키지와 종속성을 실행가능한 파일로 컴파일
- 결과 파일: 첫 번째 소스 파일 또는 소스 코드 디렉토리명
-o
옵션- 결과 파일을 지정된 출력 파일 또는 디렉터리에 쓰도록 강제
# go mod download
모듈을 모듈 캐시에 다운로드
# go mod tidy
패키지 정리, 패키지 삭제 및 추가
- 모듈의 소스코드와 go.mod 파일이 일치하는지 확인
- 패키지를 제공하는 모듈 확인
- 누락된 모듈 추가, 필요하지 않은 모듈 제거
# module cache
go command 로 다운로드된 모듈들이 저장되어있는 디렉토리
- 기본 위치:
$GOPATH/pkg/mod
# go command mode
GOPATH
mode- 모듈 무시
- vendor directories 와
GOPATH
에서 종속성을 찾음
- module-aware mode (default: go version >= 1.16)
- go.mod 파일을 사용하여 종속성을 찾음
- 모듈 캐시에서 패키지 로드 (누락된 모듈은 다운로드)
# GO111MODULE
환경 변수
off
GOPATH
mode
on
(or unset)- module-aware mode
auto
- 현재 또는 상위 디렉토리에 go.mod 파일이 있을때 module-aware mode
- go mod 서브명령과 go install 버전쿼리는 go.mod 파일이 없어도 module-aware mode
# GOPROXY
환경 변수
go command 가 프록시 또는 소스 제어 서버에 연결할 수 있도록 구성
- 모듈 프록시 URL 목록
direct
키워드- vcs(e.g. git) 와 통신해야함을 나타냄
off
키워드- 통신을 시도하지 않아야함을 나타냄
# -mod
옵션
mod
- vendor directory 무시
- 자동으로 go.mod와 go.sum을 업데이트 (e.g. 가져온 패키지가 알려진 모듈에서 제공되지 않는 경우)
- go get과 go mod tidy 는 이를 자동으로 수행
readonly
(default)- vendor directory 무시
- go.mod 를 업데이트해야 하는 경우 오류 보고
vendor
- vendor directory 사용
- network 나 module cache 를 사용하지 않음