티스토리 뷰

golang

Go Modules

fistful 2019. 2. 7. 13:02
반응형



개요

 

- golang dependency 관리를 위한 Go Modules 간략히 알아본다.

- official 링크: https://github.com/golang/go/wiki/Modules

- 참고링크 (라기보다는 링크를 따라 하였음)

- 게시물은 개인의 정리차원이며 아래의 링크를 들여다보시길 추천함

- https://goo.gl/hXbAQm

 

* 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 확인하고 설치할 있게 되었다.



반응형
댓글
댓글쓰기 폼