티스토리 뷰
Golang이라는 언어를 안지는 벌써 6년이 지났다.
그 동안 이 언어를 배우기 위해 이리저리 노력했었지만 실질적으로 사용할 일이 없었던 지라, 그냥 책을 보고 튜토리얼정도 짜보는 수준밖에는 해보지 못했기 때문에 아직도 Go에 대해 초보자라 할수 있다.
그런데 최근 팀을 옮겨 Go를 제대로 쓰게 될수 있어서 인터넷에 올라온 예제를 예전에 봤던 책들을 뒤적뒤적거리며 돌려보려 했는데... 이게 잘 안된다. 분명히 예전 나의 기억에 GOPATH/GOROOT 이란 Go Env 녀석이 정말 중요했고, 매번 바꿔야 했었는데.. 이것을 설정하니 뭐가 안된다는 에러가 막 생긴다.
그래서 부랴부랴 이런 저런 내용을 살펴보니 1.11부터 go module 이라는 것이 들어왔고, 1.13부터는 아예 기본이 되었다는 것이었다.
오 그랬구나... 그럼 이제 이거 쓰면 되는 구나.. 하고 그때부터 다시 리서치 시작.
찾다보니 Golang.org에서 이에 관련된 Tutorial 자체를 친철히 제공을 해주고 있다. 크햐 좋다.. 근데 영어로 되어있다. ㅋㅋ
영어가 많이 부담되는 분들을 위해 오늘 Go Module을 나의 언어로 간단하게 설명하려한다.
Go Module이란?
간단히 이야기해서 library dependecy를 관리해주는 녀석이다. 자바에서 Maven 와 비슷한 거다
그런데 지금까지 난 required 와 replace 이 두가지 밖에는 이 모듈에 정의를 해본것이 없다.
무슨 말이냐면..... 엄청 간하다는 거다! Maven의 pom.xml 파일 볼때마다... 한숨이 나오는데.. 이건 뭐 심플 그자체다.
module example.com/hello
go 1.12
require (
golang.org/x/text v0.3.0 // indirect
rsc.io/quote v1.5.2
rsc.io/quote/v3 v3.0.0
rsc.io/sampler v1.3.1 // indirect
)
거기다 왠만해서 내가 손을 댈필요가 없이 자동으로 업데이트를 해준다 :) 물론 회사에서 프로젝트를 할때엔 좀 건드릴 필요가 있긴 하겠지만 말이다.
Go Module Commands
- go mod init [module-name]
명령어의 이름에서도 느껴지듯이 모듈을 처음 사용할때 사용한다. module-name은 보통 github.com/jay/hello 포멧을 취한다. - go get [module-name]
모듈을 다운로드하는 명령어. - go mod tidy
소스 코드를 확인해서 import되지 않는 모듈들을 자동으로 go.mod 파일에서 삭제하고 import되었지만 실제 모듈이 다운안된 경우는 go.mod파일에 추가해준다. - go mod vendor
Module을 이용하면 module 들을 project 밑에 저장하지 않고, GOPATH에 저장하게 된다. 그러나 자신이 이용하던 모듈들을 repo에 넣고 싶을 경우가 있다. 자동으로 변경될수 있는 모듈들을 고정시키고 싶을때 말이다. 물론 버젼을 강제 지정할수도 있지만, 그 패지키 자체를 가지고 있는것도 쉬운 방법. 따라서 이 명령어를 실행시키면 사용하는 모듈들을 자신의 repo 아래 vendor폴더에 복사를 하게 된다.
이 외에도 download,edit,graph,verify,why 와 같은 명령어를 제공해주는데 모듈이 꼬이는 문제를 만나지 않는한 별로 쓸일이 없다.
마지막으로 오늘 가장 이야기하고 싶었던 것.
Go Env 핵심 variables. (go env)
GOPATH: 이제부터 이 패스는 bin/pkg/src 를 저장하는 곳이다. 자신의 프로젝트 패스가 아니다. 정확하게 각 폴더가 무엇을 하는 녀석인지는 잘 모르겠다... 근데 별로 관심이 안간다. 왜냐하면, 이 곳은 go mod이 알아서 관리해주는 거라 생각이 들기 때문 ㅋㅋ
GOROOT: 이건 예전과 동일한데, go 실행파일이 있는 패스다.
GOMODCACHE: 이곳이 바로 module들이 저장되는 곳이다
결론
모듈을 이용하면, 프로젝트를 변경할때마다 GOPATH를 매번 바꿀 필요없다.
이것만해도 정말 편한거 같다.
'IT > GOLANG' 카테고리의 다른 글
Kubernetes development for beginners (0) | 2021.02.12 |
---|---|
[Issue] Go Module can not find a package (0) | 2021.02.04 |
- Total
- Today
- Yesterday
- Canada
- ansible
- RHCE
- 부모님초청이민
- 우드워킹
- 부동산분석
- Red Hat
- TORONTO
- 온타리오
- cert
- git proGit
- basement
- 인터넷
- docker
- redhat
- certification
- 밀튼
- Jay
- RHEL
- 캐나다
- Certificate
- 토론토정착서비스
- 미시사가
- 정착서비스
- BC주
- 옥빌
- BTBS
- 토론토
- 캐나다부동산
- 벌링턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |