티스토리 뷰
개요
- golang dependency 관리를 위한 Go Modules 를 간략히 알아본다.
- official 링크: https://github.com/golang/go/wiki/Modules
- 참고링크 (라기보다는 이 링크를 따라 하였음)
- 이 게시물은 개인의 정리차원이며 아래의 링크를 들여다보시길 추천함
* TMI. dependency 란? - app 이 동작하기 위해 필요한 모듈이나 라이브러리를 말한다. - app 만 덩그러니 있어서는 동작하지 않으니, dependency 관리가 필요하다. |
Go 1.11 Modules
- Russ Cox 가 제안한 vgo project 가 패키지 버저닝을 위한 go 공식 프로젝트로 채택됨.
- Go 1.11 버전 에 실험적으로 도입되었음. 1.13 버전에서 정식으로 들어갈 것으로 보임
GO111MODULE 이라는 임시 환경변수
TL;DR: 그냥 환경변수 생각하지 말고, 맘 편하게 사용하면 된다.
GO11MODULE 환경변수의 값이
1) on 이면 $GOPATH 와는 무관하게 Go modules 방식으로 동작
2) off 이면 Go modules 를 무시하고, $GOPATH + vendor/ 폴더에 따라 go command 동작
3) 설정이 없거나 auto 설정이면
- GOPATH/src 및 하위 폴더에서는 기존방식 ($GOPATH + vendor/)
- 다른곳에서는 Go modules 방식대로 동작한다
실습해보자
- GOPATH 와는 무관한 폴더를 만들고, echo 라는 Go web framework 를 이용하여 웹서버를 만들어보자.
1) go_module_test 라는 폴더를 만들고, main.go 라는 파일을 생성
- 웹서버에 접근하면 Hello, Go Modules! 라고 회신이 온다.
- 이때 package main 명 뒤에 코멘트를 해주면 별도로 모듈의 이름을 명시해주지 않아도 된다.
2) go mod init 명령으로 go.mod 파일 생성
|
- 만약 위 소스와 같이 package main 뒤에 아래와 같은 코멘트로 모듈명을 명시하지 않았다면 // import "github.com/nicewook/go_modules_test" - go mod init github.com/nicewook/go_modules_test 라고 해줘야 한다. - 현재는 main.go 파일과 go.mod 파일만 있다. - go.mod 파일의 내용도 모듈명만 덩그러니 있다. |
3) go build 명령으로 dependency 확인
|
1) 기본적으로 go build 명령을 통해 실행파일인 go_modules_test 가 생성되었다. - 실행하니 웹서버가 동작한다. - 브라우저에서 localhost:1323 으로 접근하면 확인할 수 있다.
|
(참고) go.sum
- go sum 은 설치된 모듈들의 해시값들이다. 해시값은 모든 디지털 개체들의 지문이라 생각하면 편하다.
- go 실행시 설치된 모듈들의 해시값과 go.sum 해시값을 비교하면 설치 모듈들의 유효성을 검증한다.
→ 즉, 현재 설치된 모듈들과, 기대하는 모듈들이 같은지를 확인해준다.
4) 마지막으로, go.mod 를 보자
- 모듈명만 덩그러니 있던 go.mod 파일이, go build 명령 이후에는 dependency 정보가 자동으로 포함되었다.
- 이제 go.mod 정보만 있으면 우리의 app dependency 를 확인하고 설치할 수 있게 되었다.
'golang' 카테고리의 다른 글
Slack slash command + Golang server (0) | 2019.02.12 |
---|---|
time.Sleep, time.Duration (0) | 2019.02.11 |
Golang: Github - Travis-CI - Heroku (0) | 2019.02.07 |
Golang: io.ReadWriter 의 content 를 날려먹지 않는 법 (1) | 2019.01.28 |
git bash / vim / vim-plug / vim-go - in Windows 10 (0) | 2019.01.17 |
- Total
- Today
- Yesterday
- Bug
- JIRA
- pool
- OpenAI
- websocket
- agile
- postgres
- intellij
- 독서후기
- folklore
- Gin
- ChatGPT
- 노션
- 독서
- 클린 애자일
- github
- 영화
- golang
- API
- bun
- 잡학툰
- 2023
- 체호프
- 제이펍
- solid
- go
- notion
- 인텔리제이
- strange
- Shortcut
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |