yoongrammer

[Go] Modules 사용하기 본문

언어/Go 언어

[Go] Modules 사용하기

yoongrammer 2020. 12. 7. 22:25
728x90

이전 글

2020/12/06 - [언어/Go 언어] - [Go] Modules 알아보기

목차

    Modules 사용하기


    모듈 사용방법을 알아보도록 하겠습니다.

     

    사전 작업


    $GOPATH/src의 바깥쪽에서 빈 디렉터리를 하나 생성합니다.

    $mkdir hello

    hello.go 파일을 생성합니다.

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	fmt.Println("hello, world")
    }

    module 생성하기


    go mod init [module] 명령을 사용하여 새로운 모듈을 생성합니다.

    $ go mod init example.com/hello
    go: creating new go.mod: module example.com/hello

    go mod init명령을 수행하면 현재 패키지의 종속성 정보를 담고 있는 go.mod 파일이 생성됩니다.

    $ cat go.mod
    module example.com/hello
    
    go 1.15

    종속성(dependency) 추가


    rsc.io/quote 패키지에 있는 Hello() 함수를 호출하도록 hello.go 파일 내용을 변경하겠습니다.

    package main
    
    import (
    	"fmt"
    	"rsc.io/quote"
    )
    
    func main() {
    	fmt.Println(quote.Hello())
    }

     

    빌드를 수행합니다.

    $ go build
    go: finding module for package rsc.io/quote
    go: found rsc.io/quote in rsc.io/quote v1.5.2

    빌드시, 추가된 rsc.io/quote 패키지를 찾습니다.

    패키지가 있다면 바로 go.mod파일에 패키지 내용을 추가하고 없다면 자동으로 패키지를 다운로드한 뒤 go.mod 파일에 추가합니다.

     

    go.mod 파일을 확인합니다.

    $ cat go.mod
    module example.com/hello
    
    go 1.15
    
    require rsc.io/quote v1.5.2

    rsc.io/quote에 종속성 정보가 추가된 것을 확인할 수 있습니다.

    옆에 v1.5.2는 해당 패키지의 버전정보 입니다.

     

    종속성 정보가 추가되면 추가로 go.sum파일이 생성됩니다.

    $ cat go.sum
    golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:qgOY6WgZO...
    golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:Nq...
    rsc.io/quote v1.5.2 h1:w5fcysjrx7yqtD/aO+QwRjYZOKnaM9Uh2b40tElTs3...
    rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPX...
    rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/Q...
    rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9...

    종속성(dependency) 정보 출력


    go list -m all 명령은 현재 모듈의 종속성 정보를 출력해 줍니다.

    $ go list -m all
    example.com/hello
    golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c
    rsc.io/quote v1.5.2
    rsc.io/sampler v1.3.0

    종속성(dependency) 업그레이드


    rsc.io/quote 패키지 대신 업그레이드된 rsc.io/quote/v3 패키지를 사용해 보겠습니다.

    major 버전 변경(v1.5.2 → v3.1.0)으로 인해 일부 API가 변경되었을 수 있습니다. 아래 문서를 보면 HelloHelloV3로 변경되었습니다.

    $ go doc rsc.io/quote/v3
    package quote // import "rsc.io/quote"
    
    Package quote collects pithy sayings.
    
    func Concurrency() string
    func GlassV3() string
    func GoV3() string
    func HelloV3() string
    func OptV3() string

    hello.go 소스코드에서 HelloV3() 함수를 사용하도록 변경합니다.

    package main
    
    import (
    	"fmt"
    	quoteV3 "rsc.io/quote/v3"
    )
    
    func main() {
    	fmt.Println(quoteV3.HelloV3())
    }

    빌드를 하고 종속성 정보를 출력해 봅니다.

    $ go build
    
    $ go list -m all
    example.com/hello
    golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c
    rsc.io/quote v1.5.2
    rsc.io/quote/v3 v3.1.0
    rsc.io/sampler v1.3.0
    
    $ cat go.mod
    module example.com/hello
    
    go 1.15
    
    require (
            rsc.io/quote v1.5.2
            rsc.io/quote/v3 v3.1.0
    )

    rsc.io/quote/v3 v3.1.0 정보가 추가된 것을 확인할 수 있습니다.

    사용하지 않는 종속성 제거


    hello.go에서 더 이상 rsc.io/quote 패키지를 사용하지 않지만 여전히 go list -m allgo.mod 파일에 표시됩니다.

    $ go list -m all
    example.com/hello
    golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c
    rsc.io/quote v1.5.2
    rsc.io/quote/v3 v3.1.0
    rsc.io/sampler v1.3.0
    
    $ cat go.mod
    module example.com/hello
    
    go 1.15
    
    require (
            rsc.io/quote v1.5.2
            rsc.io/quote/v3 v3.1.0
    )

    go mod tidy 명령은 사용하지 않는 종속성을 제거해 줍니다.

    $ go mod tidy
    
    $ go list -m all
    example.com/hello
    golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c
    rsc.io/quote/v3 v3.1.0
    rsc.io/sampler v1.3.0
    
    $ cat go.mod
    module example.com/hello
    
    go 1.15
    
    require rsc.io/quote/v3 v3.1.0

    사용하지 않는 rsc.io/quote v1.5.2 가 삭제된 것을 확인할 수 있습니다.

     

     

    참고: https://blog.golang.org/using-go-modules

    728x90

    '언어 > Go 언어' 카테고리의 다른 글

    [Go] context 사용하기  (0) 2020.12.14
    [Go] context 알아보기  (0) 2020.12.13
    [Go] Modules 알아보기  (0) 2020.12.06
    [Go] Handle, Handler , HandleFunc 이해  (0) 2020.11.26
    [Go] HTTP Server 만들기  (0) 2020.11.24
    Comments