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