這是一個系列文章童漩,主要分享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代碼中提取頂級聲明的首行注釋以及每個對象的相關(guān)注釋,并生成相應(yīng)文檔古徒。通過go doc命令,可以很方便查看go語言相關(guān)API的文檔信息读恃,例如示例中查看了strings.Trim和os.Exit的文檔信息隧膘。
使用示例如下:
- go doc package:獲取包的文檔信息
- go doc package/subpackage:獲取子包的文檔信息
- go doc package.function:獲取包中函數(shù)的文檔信息
或者通過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代碼中一些可疑的結(jié)構(gòu),雖然vet不能確保發(fā)現(xiàn)的問題都是真正的錯誤艇肴,但是它可以發(fā)現(xiàn)一些編譯器無法捕獲的錯誤腔呜。例如示例中,這段代碼能正常的編譯通過再悼,但是通過vet檢測出2個問題核畴,第一個問題是打印的格式與參數(shù)類型不匹配,第二個問題需要打印的參數(shù)和所給參數(shù)數(shù)量不一致帮哈。
3 編譯時傳遞參數(shù)
示例代碼demo.go如下:
package main
import "fmt"
var BuildDate = "no build date"
func main() {
fmt.Printf("build date: %s\n", BuildDate)
}
傳遞參數(shù)步驟:
$ 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程序傳遞相關(guān)參數(shù)锰镀。例如示例中娘侍,借助-X選項咖刃,將編譯日期BuildDate實時傳遞到程序中。另外憾筏,如版本信息之類也可以通過該方式實現(xiàn)嚎杨。