說明

零值或零初始化很容易實現。來自像 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
}