假设我有以下结构:
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/