Solución:
Go es un lenguaje de recolección de basura. Se supone que no debe hacerlo y no puede eliminar objetos de la memoria. Es del recolector de basura deber y responsabilidad para hacerlo, y hace esto automáticamente. El recolector de basura eliminará correctamente los objetos de la memoria cuando se vuelvan inaccesibles.
Puede asignar nil
a mapas y sectores porque nil
es un valor válido (el valor cero) para esos tipos. El valor cero para struct
tipos no es nil
pero un struct
valor donde todos sus campos tienen sus valores cero.
Si desea borrar o sobrescribir el valor de la estructura, simplemente puede asignarle otro valor de estructura, preferiblemente el valor cero (una estructura vacía):
person1 := Person{name: "Name", age: 69}
// work with person1
// Clear person1:
person1 = Person{}
Pero sepa que esto no liberará la memoria asignada por person1
; como se escribió anteriormente, el GC lo liberará automáticamente cuando se vuelva inalcanzable.
nil
también es un valor válido (el valor cero) para los tipos de puntero, por lo que si person1
sería un puntero a Person
(es decir, *Person
), también puede asignar nil
a eso, por ejemplo:
person1 := &Person{name: "Name", age: 69}
// work with person1
// Clear person1:
person1 = nil
Al borrar un puntero configurándolo en nil
, el objeto puntiagudo, de nuevo, será atendido por el GC.
Para obtener más detalles sobre cómo funciona el recolector de basura, consulte No se puede liberar memoria una vez ocupada por bytes.
Si desea establecer nil, use un puntero en lugar de un valor.
person1 := &Person{name: "Name", age: 69}
// Then you can set
person1 = nil