gpt4 book ai didi

golang 取消引用 map

转载 作者:数据小太阳 更新时间:2023-10-29 03:22:54 26 4
gpt4 key购买 nike

这是一个示例代码,它创建了一个值为 bool 的字符串键映射。

myMap := make(map[string]bool)

myMap["Jan"] = true
myMap["Feb"] = false
myMap["Mar"] = true

在这张 map 上做了一些操作后,我想删除它。我不想使用 for 循环遍历每个键并删除。

如果我再次重新初始化 myMap(如下所示),它会取消引用原始 map 并接受垃圾回收吗?

myMap = make(map[string]bool)

最佳答案

Golang FAQ关于垃圾收集:

Each variable in Go exists as long as there are references to it. If the compiler cannot prove that the variable is not referenced after the function returns, then the compiler must allocate the variable on the garbage-collected heap to avoid dangling pointer errors.

如果当前 map 没有引用,语言将对其进行垃圾回收。但是对于删除一个map,除了循环遍历,把key一个一个删除,没有其他流程。作为

myMap := make(map[string]bool)
for k, _ := range myMap{
delete(myMap, k)
}

如果您使用 make 重新初始化 map ,它不会取消引用,它会清除 map 但不会取消引用。如果您检查它的 len,它将变为 0

package main

import (
"fmt"
)

func main() {
myMap := make(map[string]bool)

myMap["Jan"] = true
myMap["Feb"] = false
myMap["Mar"] = true
fmt.Println(len(myMap))
myMap = make(map[string]bool)
fmt.Println(len(myMap))

}

此外,如果您打印地址,它会指向相同的地址。

fmt.Printf("address: %p \n", &myMap)
myMap = make(map[string]bool)
fmt.Printf("address: %p ", &myMap)

Playground Example

关于golang 取消引用 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50323147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com