說明
零值或零初始化很容易實現。來自像 Java 這樣的語言可能看起來很複雜,某些值可能是 nil
而其他值則不是。總結零值:Go 程式語言規範 :
指標,函式,介面,切片,通道和貼圖是唯一可以為零的型別。其餘的根據各自的型別初始化為 false,zero 或空字串。
如果檢查某些條件的函式可能會出現問題:
func isAlive() bool {
//Not implemented yet
return false
}
即使在實現之前,零值也將為 false。依賴於此函式返回的單元測試可能會產生誤報/否定。
一個典型的解決方法是返回一個錯誤,這在 Go 中是慣用的:
package main
import "fmt"
func isAlive() (bool, error) {
//Not implemented yet
return false, fmt.Errorf("Not implemented yet")
}
func main() {
_, err := isAlive()
if err != nil {
fmt.Printf("ERR: %s\n", err.Error())
}
}
當返回結構和錯誤時,你需要一個使用者返回的結構,這不是很優雅。有兩種反選擇:
- 使用介面:通過返回介面返回 nil。
- 使用指標:指標可以是
nil
例如,以下程式碼返回一個指標:
func(d *DB) GetUser(id uint64) (*User, error) {
//Some error ocurred
return nil, err
}