在 Go 中,映射可以将字符串与自定义匿名结构关联起来。此类映射的声明可能会在 Gogland 等 IDE 中触发“冗余类型声明”警告。这就提出了 struct{}{} 和 {} 声明之间差异的问题。
语法解释
struct{}{} 语法表示一个复合文字,包括类型 (struct{}) 和值 ({})。另一方面,{} 也是复合文字,但它省略了类型。
编译器影响
一般来说,复合文字需要指定类型。但是,在声明映射时,键和值的类型是从映射类型推断出来的。因此,如果复合文字值与这些推断类型匹配,则在分配复合文字值时可以省略类型。
根据复合文字规范,此异常是在 Go 1.5 中引入的。它消除了在某些情况下显式指定类型的需要,从而简化了代码。
为了说明这一点,请考虑以下匿名结构体赋值:
<code class="go">var Foo = map[string]struct{}{ "foo": struct{}{}, }</code>
Gogland 可能会警告冗余类型声明。您可以使用以下语法来解决它:
<code class="go">var Foo = map[string]struct{}{ "foo": {}, }</code>
此语法省略了类型 struct{},因为类型是从分配的值推断出来的。
总而言之, struct{}{} 和 {} 的区别是前者在复合文字中显式包含类型,而后者则省略它,依赖于封闭映射声明的类型推断。
以上是Go 中的匿名结构:何时使用 `struct{}{} 与 {}`?的详细内容。更多信息请关注PHP中文网其他相关文章!