[Go] go get 알아보기
go get
명령어는 패키지 및 관련 종속성(dependency)을 다운로드 및 설치하는 명령어입니다.
패키지는 $GOPATH/src/<import-path>
경로에 저장됩니다.
Usage:
go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [packages]
-d : 설치는 하지 않고 소스 파일만 다운로드합니다.
-u : 패키지 및 해당 종속성을 업데이트합니다.
-t : 패키지에 대한 테스트를 빌드하는 데 필요한 패키지도 다운로드합니다.
-v : 진행 및 디버그 출력
자세한 옵션 설명은 go help get
을 통해 확인할 수 있습니다.
go get 사용하기
예를 통해 알아보도록 하겠습니다.
사전 작업
github
에 있는 playstack
저장소를 사용하겠습니다.
playstack 디렉터리에는 LICENSE 파일과 paly 디렉터리가 있습니다.
playstack
├── LICENSE
└── play
└── main.go
1 directory, 2 files
play디렉터리에 있는 main.go 파일 내용은 아래와 같습니다.
package main
import (
"fmt"
"github.com/NanXiao/stack"
)
func main() {
s := stack.New()
s.Push(0)
s.Push(1)
s.Pop()
fmt.Println(s)
}
main 함수에는 stack이라는 종속성 패키지가 있습니다.
go get 수행
$GOPATH
디렉터리 안을 정리한 뒤, go get
커맨드를 사용하여 playstack을 다운로드합니다.
# cd $GOPATH
# tree
.
0 directories, 0 files
# go get github.com/NanXiao/playstack
package github.com/NanXiao/playstack: no buildable Go source files in /root/gocode/src/github.com/NanXiao/playstack
빌드를 할 수 없다(no buildable Go source files in...)는 문구가 뜹니다.
이유는 go get은 저장소가 아닌 패키지에서 동작하기 때문입니다. (playstack 안에는 *.go 소스파일이 없기 때문에 유효한 패키지가 아닙니다.)
대신에 go get github.com/NanXiao/playstack/play
명령어를 사용합니다.
# go get github.com/NanXiao/playstack/play
# tree
.
├── bin
│ └── play
└── src
└── github.com
└── NanXiao
├── playstack
│ ├── LICENSE
│ └── play
│ └── main.go
└── stack
├── LICENSE
├── README.md
├── stack.go
└── stack_test.go
7 directories, 7 files
playstack과 종속성(stack)이 모두 다운로드되었을 뿐만 아니라 bin경로에 컴파일 및 설치도 되었음을 볼 수 있습니다.
컴파일 및 설치가 아닌 소스 파일만 다운로드하려면 go get -d
명령을 사용하면 됩니다.
# tree
.
0 directories, 0 files
# go get -d github.com/NanXiao/playstack/play
# tree
.
└── src
└── github.com
└── NanXiao
├── playstack
│ ├── LICENSE
│ └── play
│ └── main.go
└── stack
├── LICENSE
├── README.md
├── stack.go
└── stack_test.go
6 directories, 6 files
소스 파일만 다운로드되었음을 확인할 수 있습니다.
go get -u
를 사용하여 패키지와 해당 종속성을 업데이트할 수도 있습니다.
참고: https://nanxiao.gitbooks.io/golang-101-hacks/content/posts/use-govendor-to-implement-vendoring.html