KimiAi深度剖析:Golang面试题初探(1)

发表时间: 2024-02-27 07:31


prompt :
关于 map,下面说法正确的是()

A map 反序列化时 json.Unmarshal 的入参直接传递 map

B 在函数调用中传递 map,则函数中对 map 元素的增加会导致函数外 map 的修改

C 在函数调用中传递 map,则函数中对 map 元素的修改不会导致函数外 map 的修改

D 不能使用内置函数 delete 删除 map 的元素 请解析这道题中的每一个选项并给出最终的正确答案。



让我们逐一解析这些关于 Go 语言中 map 的说法:

A. map 反序列化时 json.Unmarshal 的入参直接传递 map

这个说法是错误的。在使用 `json.Unmarshal` 进行反序列化时,你需要传递一个指向 map 的指针,而不是 map 本身。例如:

var m map[string]interface{}json.Unmarshal(data, &m)

B. 在函数调用中传递 map,则函数中对 map 元素的增加会导致函数外 map 的修改

这个说法是正确的。在 Go 中,map 是引用类型,当你将 map 作为参数传递给函数时,你实际上是传递了 map 的引用。因此,在函数内部对 map 所做的任何修改(包括添加、删除或修改元素)都会反映到原始 map 上。

C. 在函数调用中传递 map,则函数中对 map元素的修改不会导致函数外 map 的修改

这个说法是错误的,与 B 选项相反。如上所述,由于 map 是引用类型,函数内部的修改会影响到原始 map。

D. 不能使用内置函数 delete 删除 map 的元素

这个说法是错误的。在 Go 中,你可以使用内置的 `delete` 函数来删除 map 中的元素。例如:

delete(m, key)


这会从 map `m` 中删除键为 `key` 的元素。

综上所述,正确答案是 B。在函数调用中传递 map,则函数中对 map 元素的增加会导致函数外 map 的修改。