這是一個系列文章,主要分享go的使用建議和技巧,每次分享3點,希望你能有所收穫。
1 命令行查看文檔
$ go doc strings.Trim
func Trim(s string, cutset string) string
Trim returns a slice of the string s with all leading and trailing Unicode
code points contained in cutset removed.
$ go doc os.Exit
func Exit(code int)
Exit causes the current program to exit with the given status code.
Conventionally, code zero indicates success, non-zero an error. The program
terminates immediately; deferred functions are not run.
go doc命令會從go代碼中提取頂級聲明的首行註釋以及每個對象的相關注釋,並生成相應文檔。通過go doc命令,可以很方便查看go語言相關API的文檔信息,例如示例中查看了strings.Trim和os.Exit的文檔信息。
使用示例如下:
- go doc package:獲取包的文檔信息
- go doc package/subpackage:獲取子包的文檔信息
- go doc package.function:獲取包中函數的文檔信息
或者通過godoc,可以生成web版的文檔信息,在命令行輸入godoc -http=:6060,然後使用瀏覽器打開http://localhost:6060,就可以看到web版的文檔信息。
2 檢測代碼錯誤
示例代碼demo.go如下:
package main
import "fmt"
func Func(num int) {
fmt.Printf("call Func\n")
fmt.Printf("num = %s\n", num)
fmt.Printf("num = %d\n", 1, 2, 3)
}
func main() {
Func(1)
}
使用vet工具檢測代碼:
$ go build demo.go
$ go tool vet demo.go
demo.go:7: arg num for printf verb %s of wrong type: int
demo.go:8: wrong number of args for format in Printf call: 1 needed but 3 args
通過vet工具,可以檢測到go代碼中一些可疑的結構,雖然vet不能確保發現的問題都是真正的錯誤,但是它可以發現一些編譯器無法捕獲的錯誤。例如示例中,這段代碼能正常的編譯通過,但是通過vet檢測出2個問題,第一個問題是打印的格式與參數類型不匹配,第二個問題需要打印的參數和所給參數數量不一致。
3 編譯時傳遞參數
示例代碼demo.go如下:
package main
import "fmt"
var BuildDate = "no build date"
func main() {
fmt.Printf("build date: %s\n", BuildDate)
}
傳遞參數步驟:
$ go build demo.go
$ ./demo
build date: no build date
$ DATE=`date '+%Y-%m-%d-%I:%M:%S'`
$ go build -ldflags "-X main.BuildDate=$DATE" demo.go
$ ./demo
build date: 2018-05-03-03:15:35
通過-X選項,可以給go程序傳遞相關參數。例如示例中,藉助-X選項,將編譯日期BuildDate實時傳遞到程序中。另外,如版本信息之類也可以通過該方式實現。