go变量的零值在开发中几乎是100%会碰到的,go语言本身对于各种内置类型的变量都有给出明确的零值。
- 结构体的零值不是nil, 结构体里的字段都会初始化为其基本类型的零值。
- slice切片的零值也不是,通过make初始化的切片,每一个元素都是由零值.
- map[T][V]的零值不是nil,没有通过make或者字面量初始化的map不能用,会在运行时报错
- 指向{结构体|切片|Map}的指针,默认的零值是nil
业务代码方法中返回值的问题
业务代码中,经常需要查询某一个会员信息,比如func getMember(ID int64) (Member,error) ,那么如果通过ID查询不到对应的Member,那么要返回什么呢?
- 方法一:通通返回结构体,如果查询不到会员信息,那么Member.ID == 0
- 方法二:返回指向Member的指针 Member, 如果查询不到信息,返回nil,否则返回 Member
实践中,方法二代码看起来更好看一些。而且通过判断 member != nil 这种方式也更好。
func hello(){ fmt.Println("hello") }