GoLang

GOPATH -> GoModule

Nanseo 2023. 11. 7. 17:15

버전에 따른 변화

1.11 버전부터 의존성 관리, 패키지 관리기능이 추가

1.16 버전부터 go.mod를 GOPATH 대신 디폴트로 사용하도록 변경

 

GOPATH의 문제

1. GOPATH를 바꾸지 않으려면 모든 프로젝트는 한 workspace에 저장되여야한다.

2. 새로운 directory를 만들어서 개발하려면 GOPATH를 변경하고 또 필요한 패키지를 가져와야한다.

3. 패키지가 저장되는곳은 패키지네임과 같은 directory라서 여러버전을 설치할수 없다.

 

위와 같은 문제로 개발을 위한  workspace가 GOPATH에 고정이 되어버려서 의존성 관리가 불가능해진다.

 

이와 같은 문제를 해결한 GoModule은 위의 문제들에 구애받지 않고 사용이 가능하다.

 

관련 명령어

1. go mod init [path]

-해당 명령어 실행시 폴더내에 go.mod와 go.sum 파일이 생성된다. (필수 생성)

-GOPATH에서 지정했던 모듈 이름과 동일한 개념이라고 생각하면 된다.

다만 GOPATH와 다른점은 project workspace가 $GOPATH/src 하위 디렉토리에 존재할 필요가 없다는 점이다.

1-1. go.mod

-모듈을 정의하고 종속성 정보를 저장하고 있는 파일. 이 파일을 통해 package를 관리

1-2. go.sum

-go.mod에 종속성 정보가 추가될때 생성, 종속성 관리를 위한 암호화된 체크섬 정보를 저장하고 있고 

각각의 체크섬을 확인하여 수정된 항목이 있는지 확인하는데 사용.

 

2. go get [path]

-[path]에 패키지 주소를 입력하여 외부 패키지를 다운받을수 있고 이때  go.mod에도 함께 기록한다.

 

3. go mod vendor

-$GOPATH의 경로에서 해당 프로젝트 경로로 의존성 패키지를 복사한다,

복사한 패키지를 통해 로컬 vendor 경로의 패키지를 사용할수 있다. (go run -mod vendor main.go)

-폐쇠망에서도 사용 가능하게 해줌

 

참고 링크

https://litaro.tistory.com/entry/Go-%EC%96%B8%EC%96%B4-%EC%B4%88%EB%B3%B4%EC%9D%98-Go-modules-%EC%A0%95%EB%A6%AC-%EB%85%B8%ED%8A%B8-1

https://velog.io/@you1367/Go-Path-vs-Go-Module

https://blog.naver.com/alice_k106/221618543021

https://devlifetestcase.tistory.com/55

https://go.dev/doc/go1.17

https://doitnow-man.tistory.com/entry/go-go-mod-vendor-%EC%82%AC%EC%9A%A9%EB%B2%95