使用字段名初始化结构

初始化结构时,几乎应该始终指定字段名。目前由go vet强制执行。

BadGood
k := User{"John", "Doe", true}
k := User{
    FirstName: "John",
    LastName: "Doe",
    Admin: true,
}

例外:当有3个或更少的字段时,测试表中的字段名may可以省略。

tests := []struct{
  op Operation
  want string
}{
  {Add, "add"},
  {Subtract, "subtract"},
}

省略结构中的零值字段

初始化具有字段名的结构时,除非提供有意义的上下文,否则忽略值为零的字段。
也就是,让我们自动将这些设置为零值

BadGood
user := User{
  FirstName: "John",
  LastName: "Doe",
  MiddleName: "",
  Admin: false,
}
user := User{
  FirstName: "John",
  LastName: "Doe",
}

这有助于通过省略该上下文中的默认值来减少阅读的障碍。只指定有意义的值。

在字段名提供有意义上下文的地方包含零值。例如,表驱动测试 中的测试用例可以受益于字段的名称,即使它们是零值的。

tests := []struct{
  give string
  want int
}{
  {give: "0", want: 0},
  // ...
}

对零值结构使用 var

如果在声明中省略了结构的所有字段,请使用 var 声明结构。

BadGood
user := User{}
var user User

这将零值结构与那些具有类似于为[初始化 Maps]创建的,区别于非零值字段的结构区分开来,
并与我们更喜欢的[declare empty slices][Declaring empty slices]方式相匹配。

初始化 Struct 引用

在初始化结构引用时,请使用&T{}代替new(T),以使其与结构体初始化一致。

BadGood
sval := T{Name: "foo"}

// inconsistent
sptr := new(T)
sptr.Name = "bar"
sval := T{Name: "foo"}

sptr := &T{Name: "bar"}
最后编辑: kuteng  文档更新时间: 2021-05-09 20:12   作者:kuteng