什么时候使用未命名类型?

When to use unnamed type?

阅读

我们使用命名结构类型,比如说,

type Foo struct{
   name string
   email string
}

var y Foo

解码在线数据或引入一种新类型来保存一组值和对这些值的操作


  1. 什么时候使用未命名类型?

              var x struct{
                  name string
                  email string
               }
    
  2. 初始化变量标识符的语法是什么x

作为一条快速规则,如果您发现自己再次 copying/typing 结构定义之外,您不妨将其设为命名类型。毕竟,这就是名字的全部意义所在;它们是多次引用同一事物的快捷方式。为避免命名混乱,请尽量在尽可能窄的范围内声明类型(例如,在使用它的函数范围内)。


初始化语法如下:

var x struct{
    name string
    email string
} = struct {
    name  string
    email string
}{
    name: "name", 
    email: "email",
}

可以缩短为

var x = struct {
    name  string
    email string
}{
    name:  "name",
    email: "email",
}

因为可以推断类型。

使用未命名类型的最佳时机是当您不必再次显式引用该类型时。由于该类型没有名称,要明确引用它,您(通常)必须再次复制整个类型规范。例如,在分配新值时。

// reassign x
x = struct {
    name  string
    email string
}{
    name:  "name2",
    email: "email2",
}

这很快就会变得很丑陋,尤其是对于较大的结构,重复的代码在需要更新时会产生重复的工作。

您可以尝试将其缩短如下:

// reassign x
x.name = "name2"
x.email = "email2"

这应该被认为是错误的形式,但是,因为不清楚 if/that 意图是重新分配“x”的整个值还是只是改变一些 select 字段。如果更新结构以添加更多字段,则此代码可能会在没有警告的情况下变得不正确。