
Go语言匿名结构体的精简表达
Go语言编程中,结构体定义很常见。本文将详细解释Go语言匿名结构体定义中两个花括号的意义和作用。
让我们来看一个例子:
aux := struct {
Level string `json:"level"`
Time string `json:"time"`
Message string `json:"message"`
Properties map[string]string `json:"properties,omitempty"`
Trace string `json:"trace,omitempty"`
}{
Level: level.String(),
Time: time.Now().UTC().Format(time.RFC3339),
Message: message,
Properties: properties,
}
代码中出现了两个花括号。第一个{标志着匿名结构体的定义开始,它定义了结构体的字段名、类型和JSON标签(json:"...")。这些字段包括level、time、message、properties和trace,数据类型分别为string和map[string]string。omitempty标签表示如果字段值为空,JSON序列化时将忽略该字段。
立即学习“go语言免费学习笔记(深入)”;
第二个}标志着匿名结构体的定义结束,同时表示一个匿名结构体的字面值赋值。在这个花括号内,我们通过Level: level.String(), Time: time.Now().UTC().Format(time.RFC3339), Message: message, Properties: properties的方式,为刚刚定义的匿名结构体字段赋值。
因此,这两个花括号组合在一起,构成一个匿名结构体的字面值声明和初始化。它简洁地定义了一个结构体并同时赋值,避免了显式声明结构体类型,然后再去创建实例的繁琐步骤。这种方式在需要临时创建一个结构体对象时非常实用。 struct {...}{...}表达式创建一个匿名结构体并立即用字面值初始化它。










