如果你想查詢套件、函式等的說明,可以使用 go doc 指令。
查詢文件
如果你想要查詢套件的文件說明,可以使用 go doc packageName,例如 go doc fmt 可查詢 fmt 套件的說明,
可以看到,這顯示了整個套件的說明,通常我們會想要查詢套件中某個函式,這可以使用 go doc packageName.funcName,例如,查詢 fmt 中的 Println,可以使用 go doc fmt.Println:
你也可以加上 -src 來查詢原始碼,雖然整個套件也可以查詢,不過我想,這直接開 Go 目錄的 src 中原始碼來看比較快,或許加上 -src 的機會,會是在查詢函式的原始碼時比較多:
如同 go xxx 的指令說明,想要得到 go doc 的說明,可以使用 go help doc 指令。
註解即文件
實際上,go doc 的文件說明來自於原始碼中的註解,這樣的概念有點類似 Java 的 JavaDoc,或者是 Python 的 DocString,不過 Go 的理念是讓它更簡單,不使用特殊標記,不使用特別的格式,希望可以在沒有 go doc 的場合中,也可以藉由閱讀原始碼中的註解,輕易地得到文件說明。
當然,基本上還是要有一些約定,例如,在函式之前,緊接著函式的註解,中間沒有空白行,就是函式的文件說明來源。
類似地,在套件之前,緊接著套件的註解,就是套件的文件說明來源,通常,一個套件的文件說明,會是來自於套件中,一個 doc.go 中 package 宣告前的註解,例如,你可以在 fmt 的原始碼目錄 中,找到一個 doc.go,其中除了 package fmt 之外,沒有任何原始碼,剩下的只有註解。
除了函式、套件之外,最頂層的型態宣告、變數、常數等前緊接著的註解,都可以是文件的來源,不相鄰的註解則會被 godoc 忽略,如果有已知的 Bug,可以使用 BUG() 標示,例如 bytes.go 中有個:
// BUG(rsc): The rule Title uses for word boundaries does not handle Unicode punctuation properly.
func Title(s []byte) []byte {
    ....
這會出現在文件的 Bugs 區段。
如果你想要從註解產生 HTML 文件(使用 -html 引數),那麼有幾個簡單的規則(用過 Markdown 的應該感覺有點熟悉),參考一下 Go 的原始碼,應該能很快地掌握。
基本上,go doc 會在 GOROOT 與 GOPATH 中的原始碼查詢註解作為文件,如果想改變查詢時的 Go 目錄,可以使用 -goroot 指定。
有關註解與文件間的關係,也可以進一步參考 Effective Go 的 Commentary。
godoc 文件伺服器
Go 1.2rc1 之後,曾經從 go doc 改用 godoc 指令了,不過,從 Go 1.5 Release Notes 中看到,Go 1.5 有個新的 go doc 指令,專門用於命令列模式下的文件查詢,這使得 godoc 主要剩下文件服器的功能,因而在 Go 1.13 中,godoc 被移除。
如果在一個網路受限的環境,又想要在網頁上查詢文件,還是可以安裝 godoc:
go get -u golang.org/x/tools/cmd/godoc
這時執行 bin 中的 godoc,並附帶一個 -http 引數指定連接埠,例如,./bin/godoc -http=:6060,這會在本機啟動一個 HTTP 伺服器,使用瀏覽器連接 http://localhost:6060(或 http://主機IP:6060)就可以查詢文件:

