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 을 해서 빌드 또는 실행해주면 된다.
'개발의 정석 > 언어' 카테고리의 다른 글
[#golang] html 태그 제거(strip tags) (0) | 2020.03.30 |
---|---|
[#golang] 맵에 키가 존재하는지 체크하는 방법 (0) | 2020.03.26 |
[#golang] 소스코드에서 커맨드 실행하기 (0) | 2020.03.26 |
[#golang] 디렉토리의 파일 리스트 찾기 (0) | 2020.03.26 |
[#python] 리스트 자유자재로 다루기 (0) | 2020.03.24 |
댓글