下面是一个示例代码,用于创建值为bool的字符串键映射。
myMap := make(map[string]bool)
myMap["Jan"] = true
myMap["Feb"] = false
myMap["Mar"] = true
在此地图上执行某些操作后,我想删除它。我不想使用for循环遍历每个键并删除。
如果我再次重新初始化myMap(如下所示),它是否取消引用原始内容并进行垃圾收集?
myMap = make(map[string]bool)
答案 0 :(得分:0)
只要有对它的引用,Go中的每个变量都存在。如果 编译器无法证明变量未被引用 函数返回,然后编译器必须分配变量 垃圾收集堆,以避免悬空指针错误。
如果没有用于当前地图的引用,它将被语言垃圾收集。但是对于删除地图除了循环之外没有其他进程并且逐个删除密钥。如
myMap := make(map[string]bool)
for k, _ := range myMap{
delete(myMap, k)
}
如果您使用make
重新初始化地图,它将不会取消引用它将清除地图但不会取消引用它。如果您检查它的len,它将变为zero
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)