go技巧分享(一)

這是一個系列文章,主要分享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實時傳遞到程序中。另外,如版本信息之類也可以通過該方式實現。

發佈了63 篇原創文章 · 獲贊 11 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章