假设我有以下结构:
type Person struct {
name string
age int
}
Run Code Online (Sandbox Code Playgroud)
如果我创建该结构的对象
person1 := Person{name: "Name", age: 69}
Run Code Online (Sandbox Code Playgroud)
如果我将此对象设置为nil
person1 = nil
Run Code Online (Sandbox Code Playgroud)
它不起作用,实际上它是一个类型赋值错误,但它适用于地图和切片.那么,我将如何删除对象,即解除分配?我查看了删除内置文档,但它从给定的地图中删除了一个条目.谢谢.
icz*_*cza 30
Go是一种垃圾收集语言.您不应该,并且您无法从内存中删除对象.这是垃圾收集者的职责和责任,它会自动完成.垃圾收集器将在内存无法访问时正确地从内存中删除它们.
您可以分配nil
给地图和切片,因为这些类型nil
的有效值(零值).struct
类型的零值不是nil
一个struct
值,其中所有字段的值都为零.
如果要清除或覆盖struct值,可以简单地为其指定另一个struct值,最好是零值(空结构):
person1 := Person{name: "Name", age: 69}
// work with person1
// Clear person1:
person1 = Person{}
Run Code Online (Sandbox Code Playgroud)
但要知道这不会释放分配的内存person1
; 如前所述,当GC无法访问时,它将自动释放.
nil
也是指针类型的有效值(零值),因此如果person1
是指向Person
(即*Person
)的指针,您也可以分配nil
给它,例如:
person1 := &Person{name: "Name", age: 69}
// work with person1
// Clear person1:
person1 = nil
Run Code Online (Sandbox Code Playgroud)
通过将指针设置为清除指针时,nil
GC将处理指向的对象-again-.
有关垃圾收集器如何工作的更多详细信息,请参阅Golang - 一旦被bytes.Buffer占用,就无法释放内存.
sad*_*lil 10
如果你想设置 nil 使用指针而不是值。
person1 := &Person{name: "Name", age: 69}
// Then you can set
person1 = nil
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23280 次 |
最近记录: |