본문 바로가기
Go

Go modules

by 참새는 짹짹 2021. 1. 19.

GOROOT


go 가 설치된 경로

go와 관련된 실행파일, sdk 등이 위치하는 곳

GOPATH


현재 내가 만들고 있는 go 프로그램의 경로 (working directory)

패키지, 소스 파일 등이 위치

기본 구조
  • bin
    • 실행 파일이 위치
  • pkg
    • 컴파일된 패키지의 오브젝트 파일이 위치
  • src
    • 소스 파일이 위치

따라서, 프로젝트 경로도

GOPATH/src 안에 존재해야 하고

import한 라이브러리(모듈)의 소스 파일들도 여기 존재하게 된다

💡
무엇보다 프로젝트 워크스페이스가 GOPATH/src에 고정 되어야 하기 때문에 외부 디렉토리에서 프로젝트를 생성할 수 없다는 단점이 있다

이런 단점을 해소하고

의존성을 관리해주기 위해 Go 버전 1.11 이후부터는

Go Modules을 사용할 수 있다

Go Modules


앞서 말한 것처럼 go modules 기능을 이용한다면

GOPATH/src 외부에 워크 스페이스를 생성할 수 있고

이 기능은 GO111MODULE 라는 환경 변수를 통해 활성화가 가능하며

기본값은 "" 로 되어있다

GO111MODULE


  • on
    • Go modules 방식
  • off
    • 기존 GOPATH 방식
  • "" or auto
    • GOPATH/src 내부 프로젝트
      • 기존 GOPATH 방식
    • GOPATH/src 외부 프로젝트
      • Go modules 방식

사용


go mod init [모듈 이름]

명령을 사용하면 go.mod 파일이 만들어 지고

여기서 사용하는 모듈 이름으로 내 프로젝트의 안의 패키지를 참조할 수가 있다

예를 들어 기존에 GOPATH 방식에서는 GOPATH/src/truebird/golang/module이 워크 스페이스이고 안에 tistory라는 패키지를 참조한다고 하면

  • import "truebird/golang/module/tistory"

    라고 선언해야 했지만

  • Go Modules 방식에서는

    import "모듈 이름/tistory" 로 선언해 사용할 수 있다

go.mod


go.mod 파일에는 import된 패키지들의 정보가

들어가고 이를 통해 의존성을 관리할 수가 있게 된다

💡
go.mod가 만들어진 프로젝트는 go 커맨드 사용시 go.mod에 있는 패키지 정보들을 알아서 받아오고 GOPATH/pkg/mod 안에 설치해 사용한다


'Go' 카테고리의 다른 글

golang 리시버  (0) 2021.02.14
Go run, build, install?  (0) 2021.01.20
golang 상속? 임베딩?  (0) 2021.01.08

댓글