已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。
昨天关门了。
Improve this question
当我在Golang使用map时,我遇到了一个奇怪的形状。我用关键字“使用struct时使用两个花括号”搜索了一下,但是没有找到。下面这样使用两组花括号(如“struct{}{}”)是什么意思?
menu := map[string]interface{}{
"icecream": "delicious",
"eggs":struct {
price float64
}{"chicken", 1.75} }
1条答案
按热度按时间uujelgoq1#
让我们来分析一下:
创建一个变量
menu
,类型为map[string]interface{}
(interface{}
是任何类型,它实现了一个没有方法的接口,所以基本上任何类型都可以赋值)。最后一个左括号是这个Map中包含的实际数据可以写入的地方,所以:可以写成
现在,在代码中,第一个键值对很简单:
第二个是你不清楚的:
现在这段代码不会被编译,但是让我们把它修改成可以编译的代码:
我们在这里要做的是向
meny
Map添加一个键(类型map[string]any
),并且赋给键eggs
的值是一个结构体,具体来说是一个包含2个字段的匿名结构体:我们希望将字段设置为特定的值,因此必须初始化此结构体:
这与写作是一样的:
或者甚至:
这里让你困惑的可能是在初始化结构体时忽略了字段(这被认为是错误的形式,只有在字段的顺序被保留的情况下才能真正起作用。
那么下面的代码将无法工作:
但这将:
总的来说,在测试之外,或者在不需要使用/分离数据子集的情况下,在用于编组(反编组)大型数据集的类型中,这样的事情并不常见。我想我上一次在代码中使用这种匿名结构是在我必须接收和传递XML数据块,但不对它进行任何处理的时候,我会创建这样的类型: