그래 그리 쉽지는 않겠지

검색

검색 아이콘검색을 여는 아이콘

go module

2023-10-12

모듈

Go가 종속성을 관리하는 방식

# go module 생성

1
go mod init <module-path>

# 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 에 설치
  • 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 를 사용하지 않음

# References