Go commands

go build

$ go build hello.go
$ ./hello

# 會編譯當前目錄下的所有 .go
# 但是只有 package 是 main 而且擁有 main() 的那個檔案會被編譯成執行檔
# 執行檔的檔名會是目錄名稱而不是 .go 的檔名
$ go build

go build 一個非 package main 的 .go 檔案不會產生任何東西
要執行 go install 才會產生 .a 並安裝到 $GOPATH/pkg

go run

$ go run hello.go

# equals to

$ go build hello.go
$ ./hello

go get

# download and install packages and dependencies
# 會把原始碼存到 `$GOPATH/src`,執行檔放到 `$GOPATH/bin`
$ go get -v github.com/nsf/gocode

# the -u flag instructs get to use the network to update the named packages and their dependencies
$ go get -u github.com/astaxie/bat

# 可以直接安裝某個 repo 的某個子目錄
$ go get github.com/rlmcpherson/s3gof3r/gof3r

# 如果你的 repo 已經在電腦裡了,你可以執行以下指令安裝 dependencies
# the -t flag instructs get to also download the packages required to build the tests
$ go get -t ./...

go install

# 假設 hello_bin 目錄中有一個同名的 hello_bin.go 而它的 package 是 main
# 則 go install 就會編譯 hello_bin.go 為執行檔 hello_bin 然後放到 $GOPATH/bin
$ cd "$GOPATH/src/github.com/vinta/hello_bin"
$ go install

# 假設 hello_lib 目錄中有一個同名的 hello_lib.go 而它的 package 是 hello_lib
# 則 go install 就會編譯 hello_lib.go 為 hello_lib.a 然後放到 $GOPATH/pkg
# 然後你就可以在程式中 import "github.com/vinta/hello_lib"
$ cd "$GOPATH/src/github.com/vinta/hello_lib"
$ go install

go get YOUR_PATH 的 YOUR_PATH 是相對於 $GOPATH/src 的路徑

ref:
http://golang.org/doc/code.html
https://github.com/golang/go/wiki/PackagePublishing

go list

# list all installed packages
$ cd "$GOPATH"
$ go list ./...

go test

# 會編譯並執行目錄下的所有 `*_test.go` 檔案
$ go test