How to Write Go Code
阿新 • • 發佈:2018-10-07
gopath man 如何 pos .html 環境 規則 .org 命名 本文為官方文檔How to Write Go Code的閱讀總結:https://golang.org/doc/code.html
概覽
- 介紹一些基本概念和規範。
- 介紹如何寫package和使用go tool。
代碼結構
go tool要求代碼結構遵循固定的規範。
規範概要
- 所有go代碼都放在一個workspace下,也就是workspace下包含多個repository。
- 每個repository可以包含多個package,每個package也可以包含多個go代碼文件。
- package所在目錄的路徑就是它的import path。
workspace
默認是$HOME/go,可以通過GOPATH環境變量修改。
- workspace下的src子目錄用於存放repository源碼。
- bin子目錄用於存放go tool生成的可執行文件。
註意點:文中說workspace下不應使用軟鏈,原因尚不明確。
GOPATH
GOPATH環境變量的作用是指定workspace的路徑。
可以通過執行go env GOPATH檢查確認當前的workspace設置。
技巧:go env可以查看所有GO環境變量。
import paths
package類型可以分三種:
- go語言標準庫裏的package。
- 本地workspace下的package。
- 遠端repository。
註意點:自己的package不要跟標準庫的package名字相同。
first program/library and using go tool
首先創建一個目錄作為package,然後在這個package下編寫代碼文件。
文中將代碼分成了兩個類型
- 待main函數的代碼,叫command source或program。
- 不帶main函數的代碼,叫package source或library。
go tool
- 對於command source,執行go install package會編譯生成可執行文件,並安裝到bin子目錄。
- 對於package source,執行go install package會生成.a目標文件,放在 pkg子目錄。(本人測試過。)
另說明:文中提到執行go build package會將編譯後的package放在local build cache中,經查1.10以前的版本沒有build cache,按照本人測試機1.9.4版本go help build的說法,對於non-main package,go build package執行完後會刪除目標文件,因此只起到證明package可以build的作用。
技巧及註意點:
- go tool命令後面跟的package名,必須是相對src目錄的路徑,不是相對當前目錄的路徑。
- 當前目錄是package時,可以直接執行go tool命令,不用跟package名。
- go tool只會在出錯時有輸出,因此無輸出就是執行正常。
package name
幾條規則和規範:
- 所有go代碼文件第一行必須是package name。
- 同一個package裏的代碼文件必須是同一個package name。
- 按慣例,package name就是import path的最後一級目錄名。
- 可執行代碼文件必須是package main。
- package name沒有必要是唯一的,只需要import path唯一即可。
Test
go語言包含一個輕量級的測試框架,有兩部分:
- 一個package:testing。
- 一個命令:go test package。
規範:
- 測試代碼文件以*_test.go命名。
- import “testing”。
- 測試函數以TestXXX命名,以*testing.T為參數。
- 調用t.Error或t.Fail表示失敗。
package stringutil
import "testing"
func TestReverse(t *testing.T){
}
Remote packages
go get命令會執行fetch,build,install等步驟。
包含remote package的項目且remote package沒被拉到本地時,需要用go get,用go install不行。
疑問
- rune
參考資料
- 1.10版本中才出現build cache:https://golang.org/doc/go1.10
How to Write Go Code