go1.11 modules 사용
2018.09.01 04:24
설명은 링크로 대체.
영문 오쏘 설명: https://github.com/golang/go/wiki/Modules
국문 사용자 설명: https://kimmachinegun.github.io/2018-08-25/go-modules-살펴보기
이번에 추가된 module로 인해서 할 수 있는게 더 생겼는데 예를 들면 Github 같은 VCS에서 branch(정확하게는 release) 또는 tag에 따라 버전 선택이 가능해졌다.
GOPATH와 무관하게 돌릴 수 있다는 점까지 더해서 쓰는 사람 입장에서는 확실히 편하게 쓸 수 있는 여지가 보인다.
패키지를 받아서 쓸 때는 아래와 같은 식으로 작업한다.
go mod init
# pkg를 다운로드 하고, require 구문을 생성해준다.
go mod tidy
go build 또는 go install
패키지 배포시에는 아래와 같이 한다.
1. 신규
- 패키지 소스 작성 > Git 레포지터리 초기화(=master 등록) & 커밋 > master 푸시
2. 수정 및 업데이트
- Git 분기(branch) 생성 > 분기로 체크아웃 > 분기 커밋 & 분기 게시(=푸시?)
- Git master로 체크아웃 > 패키지 소스 수정 > master 커밋 & 푸시
3. (Major) 버전 업데이트
- Git 분기(branch) 생성 > 분기로 체크아웃 > 분기 게시(=푸시?)
- Git master로 체크아웃 > 패키지 소스 수정 및 go.mod 버전 표기 추가 > master 커밋 & 푸시
위 절차에서 소스 수정시마다 2, 3번 과정이 무한반복이라고 보면 되며, 패키지로 가져오려면 Release 또는 Tag 표기가 되어 있어야 한다.
개인적으로 tag는 쓰기가 너무 불편해서 Github이나 Bitbucket 같은 서비스를 쓸 경우 해당 서비스의 Release 기능을 활용하는게 좋을 것 같다.
모듈 예시: https://github.com/practice-golang/go111module-pkghello
"모듈 예시"를 땡겨오는 예시 - import 주석은 $GOPATH/src/{패키지 이름} 안에서 작업할 때는 안 넣어도 된다.
- GO111MODULE=on 환경변수는 당연히 잡아줘야 한다.
# import 주석이 없어도 되는 경우: 소스 파일의 위치가 GOPATH 내부 src/pkg-name 안에 있을 경우
project (=$GOPATH)
ㄴsrc
ㄴpkghello
ㄴpkghello.go
# import 주석이 있어야 되는 경우: 소스 파일 위치가 GOPATH 외부 또는 위 경로가 아닐 경우
# package 명은 선언할 때 github.com 같은 도메인 없이 // import "pkghello" 이렇게 해도 된다.
위 예시대로 하면, hell이라는 이름의 패키지로 가져오게되는 최종 코드는 "Hello, this is 3.2.0"이 아닌, "Hello, this is 3.1.0"을 가져와서 출력하게 된다.
아래는 그냥 참고
* GOPATH 밖에서 쓰는게 기본이며, GOPATH안에서는 반드시 환경변수에서 GO111MODULE=on 설정을 선행해야 한다.
* 패키지 배포시 반드시 v1.2.3 - 이 규칙을 따라야 한다.
* 패키지 개발자는 소스 경로 뒤에 /v2, /v3 등의 꼬리표를 붙여서 Major version을 구분하고 Release/Tag로 Minor/Patch version을 세분화할 수 있다.
* 사용자는 위 경로 뒤에 Minor/Patch version을 이용하여 정확히 가져오려는 패키지 또는 모듈 버전을 지정할 수 있다.
* 예시대로 정확하게 하지 않으면 go.sum과 go.mod 내용에서 사용자가 받은 패키지의 버전 숫자가 제멋대로 v0.0.0 으로 바뀐다.
* Author 가 작성한 영문설명대로 Git 최신버전을 굳이 사용할 필요는 없다. - 작년 버전 동작 확인
* 버전이 0.x 대이거나 1.x 대일 경우 v0, v1은 넣지 말라고 한다. 그래서 위의 예시에서도 v0, v1과 v 빠진 부분은 받아지지 않을 것이다.
- 이건 일관성이 없어 보이는데 나중에는 바뀔 거라 기대한다.
* 로컬패키지를 사용하는 예시로 따로 레포지터리를 만들어봤다.
* vscode, go extension
- 자동완성 문제는 GOPATH, inferGopath, go mod vendor로 해결 가능하다. 베타8에서 해결된 것 같다. #1532에 관심을 갖자. 오쏘가 창구를 닫았다. 곧 정식 나올 것 같다. 으히히~
끝.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
7 | 고루틴 제한 | 꿈돌이 | 2022.12.20 | 101 |
6 | go mod vendor 안될 때 | 꿈돌이 | 2021.04.20 | 172 |
5 | Go 최신 버전 확인 | 꿈돌이 | 2021.03.07 | 229 |
4 | vscode-go로 컴파일 할 때 ldflags 달아주기 | 꿈돌이 | 2020.04.28 | 343 |
3 | go 업데이트 | 꿈돌이 | 2020.04.20 | 360 |
2 | vscode 에서 golang 자동완성 툴로 gopls 사용하기 | 꿈돌이 | 2019.08.13 | 15054 |
» | go1.11 modules 사용 | 꿈돌이 | 2018.09.01 | 2083 |