首页  >  文章  >  后端开发  >  Go 中的匿名结构:何时使用 `struct{}{} 与 {}`?

Go 中的匿名结构:何时使用 `struct{}{} 与 {}`?

Linda Hamilton
Linda Hamilton原创
2024-11-02 07:01:02302浏览

 Anonymous Structs in Go: When to Use `struct{}{} vs. {}`?

了解匿名结构中 struct{}{} 和 {} 的区别

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn