go零值问题总结

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 这种方式也更好。

1 Comment

  1. nono

    func hello(){ fmt.Println("hello") }

    Reply

Leave a Comment

Your email address will not be published. Required fields are marked *

PHP 8.1.1 - 15.708 ms, 0 Q