我在长期使用 C/C++ 进行开发后,最近开始学习 Go。所以我还是有把 Go 语法类比为 C/C++ 的倾向。
我的 Go 导师 (ChatGPT :( ) 告诉我,这就是在 Go 中创建 + 初始化映射(从字符串到 int)的方法:
var foo = map[string]int{}
或
var foo = make(map[string]int)
对于我偏向于 C/C++ 的人来说,
=
的使用看起来像是从类型为 foo
的临时匿名对象分配的默认初始化变量 map[string]int
。make()
做出令我满意的解释,但它仍然“看起来”隐含着一个临时的匿名对象,因为 make()
返回的假定对象被分配给 foo
和 =
)
我的问题是:
上述两条语句是否涉及临时匿名对象的赋值?
如果是,(如何)在 Go 中实例化(并默认初始化)一个
map
对象而不涉及任何临时的匿名对象?
我尝试过的:
以下两项在 Go 中似乎都无效:
var foo map[string]int
var foo map[string]int{}
我将这个 Go 语法类比为 C++ 的“等价”
std::map<string, int> foo;
与
std::map<string, int> foo = map<string, int>();
var x = y
(或 x := y
)是在 Go 中声明变量并用值初始化它的方式。您正在寻找的替代语法不存在,并且此处没有创建“临时变量”。