提问人:StoneThrow 提问时间:10/21/2023 最后编辑:StoneThrow 更新时间:10/21/2023 访问量:84
在 Go 中创建地图时是否涉及临时的匿名对象?
Is there a temporary, anonymous object involved in creating maps in Go?
问:
我主要在 C/C++ 中开发很长时间后,正在学习 Go。所以我仍然倾向于将 Go 语法类比为 C/C++。
我的 Go 导师(ChatGPT :( )告诉我,这就是你在 Go 中创建 + 初始化映射(从 string 到 int)的方式:
var foo = map[string]int{}
或
var foo = make(map[string]int)
在我偏向于 C/C++ 的眼中,看起来像默认初始化变量的使用是从 类型的临时匿名对象分配的。
(ChatGPT 没有做出令我满意的解释,但它仍然“看起来”隐含地涉及一个临时的匿名对象,因为 assigned to 返回了一个假定的对象=
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>();
答:
1赞
user229044
10/21/2023
#1
var x = y
(或 ) 是声明变量并使用 Go 中的值初始化它的方式。您要查找的替代语法不存在,并且此处没有创建“临时变量”。x := y
寻找 C++ 的类似物是没有用的。映射不是 C++ 类。它是通过引用“复制”的。
即使运行以下代码...
var m1 = map[string]int{}
var m2 = m1
...你仍然没有复制任何东西。
评论
var foo map[string]int