gpt4 book ai didi

go - 如何在go中删除结构对象?

转载 作者:IT老高 更新时间:2023-10-28 13:05:03 32 4
gpt4 key购买 nike

假设我有以下结构:

type Person struct {
name string
age int
}

如果我创建该结构的对象

person1 := Person{name: "Name", age: 69}

如果我将此对象设置为 nil

person1 = nil

它不起作用,实际上它是一个类型分配错误,但它适用于 map 和 slice 。那么,否则我将如何删除对象,即解除分配?我查看了 delete builtin 的文档,但它从给定的 map 中删除了一个条目。谢谢。

最佳答案

Go 是一种垃圾收集语言。您不应该这样做,也不能从内存中删除对象。这样做是垃圾收集器的职责责任,它自动这样做。当对象变得不可访问时,垃圾收集器会正确地从内存中删除对象。

您可以将 nil 分配给映射和 slice ,因为 nil 是这些类型的有效值(zero value)。 struct 类型的零值不是 nil 而是一个 struct 值,其中所有字段的值都为零。

如果你想清除或覆盖结构值,你可以简单地 assign另一个结构值,最好是零值(一个空结构):

person1 := Person{name: "Name", age: 69}
// work with person1

// Clear person1:
person1 = Person{}

但要知道,这不会释放 person1 分配的内存;如前所述,当它变得无法访问时,它会被 GC 自动释放。

nil 也是指针类型的有效值(零值),因此如果 person1 将是指向 Person 的指针(即是,*Person),你也可以将 nil 赋值给它,例如:

person1 := &Person{name: "Name", age: 69}
// work with person1

// Clear person1:
person1 = nil

当通过将指针设置为 nil 来清除指针时,指向的对象 - 再次 - 将由 GC 处理。

有关垃圾收集器如何工作的详细信息,请参阅 Cannot free memory once occupied by bytes.Buffer .

关于go - 如何在go中删除结构对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42066797/

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