본문 바로가기
개발의 정석/언어

[#golang] go modules로 쉽게 의존성 패키지 관리하기

by 발자개발 2020. 3. 24.

 

 

 

module main

go 1.13

require github.com/labstack/echo/v4 v4.1.15 // indirect

golang에서 외부 패키지를 사용할때 보통 go get -u github.com/xxxxx 로 패키지를 다운받고 사용하고 싶은 .go 파일에서 import gitgub.com/xxxxx 로 임포트해서 사용한다. 근데 이런 경우, github.com/xxxxx 패키지가 업데이트된 후 go get -u github.com/xxxxx 을 하면 업데이트 이후 버전의 패키지를 다운받게되어 이전과 동작이 다르게 된다.

 

그래서 동일한, 혹은 특정한 패키지 버전을 보장할 수 있도록, 패키지 버저닝(Packaging Versionging) golang 11 버전에서 공식으로 도입된 Go Modules을 사용하는 방법에 대해서 알아보자.

 

 

Go Modules 사용 방법

예시로 아래와 같은 코드를 작성하고 main.go 로 저장해보자. 원래라면 외부 패키지인 github.com/labstack/echo/v4 를 설치해줘야 한다.

package main

import (
	"net/http"
	"github.com/labstack/echo/v4"
)

func main() {
	e := echo.New()
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Home")
	})
	e.GET("/echo", func(c echo.Context) error {
		return c.String(http.StatusOK, "Echo")
	})
	e.Logger.Fatal(e.Start(":3355"))
}

 

하지만 Go Modules를 사용할 땐 단순히 코드를 저장한 곳에서 go mod init <패키지명>을 해주면 된다. 

go mod init main

 

그러면 go.mod 파일이 생기고 go build main.go 또는 go run main.go 를 해서 빌드 또는 실행하게 되면 내부에서 사용된 최신 패키지를 자동으로 찾아서 버전과 함께 저장하게 되고, go.mod 파일에 정확한 버전이 표시되고 go.sum 파일이 생기면서 세부 dependency가 걸린 외부 패키지 버전들이 표시된다.

 

go.mod 파일

module main

go 1.13

require github.com/labstack/echo/v4 v4.1.15 // indirect

 

go.sum 파일

github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/labstack/echo v3.3.10+incompatible h1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8bbnE7CX5OEgg=
github.com/labstack/echo/v4 v4.1.15 h1:4aE6KfJC+wCnMjODwcpeEGWGsRfszxZMwB3QVTECj2I=
github.com/labstack/echo/v4 v4.1.15/go.mod h1:GWO5IBVzI371K8XJe50CSvHjQCafK6cw8R/moLhEU6o=
github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=
github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=

 

다른 버전을 사용하고 싶다면 go.mod에서 버전 정보를 고쳐서 go build main.go 또는 go run main.go 을 해서 빌드 또는 실행해주면 된다.

 

 

 

댓글