说明
零值或零初始化很容易实现。来自像 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
}