Comment faire pour supprimer struct objet en aller?
Disons que j'ai la structure suivante:
type Person struct {
name string
age int
}
Si je fais un objet de cette structure
person1 := Person{name: "Name", age: 69}
Si j'ai mis cet objet à néant
person1 = nil
ça ne fonctionne pas, en fait, c'est une affectation de type d'erreur, mais il fonctionne pour les cartes et les tranches. Donc, sinon comment aurais-je supprimer l'objet que j'.e désallouer? J'ai regardé la documentation pour supprimer builtin, mais elle supprime une entrée à partir d'une carte donné. Merci.
Chaque élément d'une telle variable ou une valeur est définie à la valeur zéro pour son type: false pour les booléens, 0 pour les entiers, 0.0 pour les flotteurs, "" pour les chaînes, et de néant pour les pointeurs, fonctions, les interfaces, les tranches, les canaux, et des cartes.
OriginalL'auteur redpix_ | 2017-02-06
Vous devez vous connecter pour publier un commentaire.
Go est un de ces ordures de la langue. Vous n'êtes pas censé le faire, et vous ne pouvez pas supprimer les objets de la mémoire. C'est le garbage collector devoir et responsabilité de le faire, et il le fait automatiquement. Le garbage collector supprimer correctement les objets de la mémoire lorsqu'ils deviennent inaccessibles.
Vous pouvez affecter
nil
les cartes et les tranches, carnil
est une valeur valide (la la valeur zéro) pour ces types. La valeur zéro pour lesstruct
types n'est pasnil
mais unstruct
de la valeur là où tous ses champs ont leurs valeurs zéro.Si vous souhaitez effacer ou remplacer la structure de la valeur, vous pouvez simplement attribuer une autre structure de la valeur, de préférence la valeur zéro (vide struct):
Mais sachez que cela ne libère pas la mémoire allouée par
person1
; comme l'a écrit plus haut, il sera libéré automatiquement par le GC, il devient inaccessible.nil
est également une valeur valide (la valeur zéro) pour les types de pointeur, donc siperson1
serait un pointeur versPerson
(qui est,*Person
), vous pouvez également affecternil
, par exemple:Lors de l'effacement d'un pointeur en paramètre à
nil
, l'objet pointé, à nouveau, sera pris en charge par le GC.Pour plus de détails sur la façon dont le garbage collector, voir Golang - Ne peut pas libérer la mémoire occupée par octets.Tampon.
comment puis-je effacer struct dans la méthode
Si vous souhaitez effacer le récepteur, il doit être un pointeur, et d'attribuer un vide struct à la valeur indiquée.
OriginalL'auteur icza
Si vous voulez mettre à néant l'utilisation du pointeur au lieu de la valeur.
OriginalL'auteur sadlil