Maison >développement back-end >Golang >Comment effacer efficacement une tranche dans Go et libérer sa mémoire sous-jacente ?
Effacer une tranche dans Go
L'article traite de l'approche optimale pour effacer une tranche dans Go. La solution initialement proposée cherchait à effacer une tranche en la définissant sur une plage vide de son propre tampon. Bien que cette approche semble logique, elle ne libère pas la mémoire sous-jacente associée à la tranche.
La solution recommandée consiste simplement à définir la tranche sur zéro. Les tranches nulles dans Go présentent des caractéristiques de bon comportement, et l'attribution de la tranche à zéro libère la mémoire sous-jacente au garbage collector. Cette approche efface efficacement la tranche sans encourir les limitations de la proposition initiale.
Pour illustrer l'efficacité de cette méthode, considérons l'exemple de code suivant :
package main import ( "fmt" ) func dump(letters []string) { fmt.Println("letters = ", letters) fmt.Println(cap(letters)) fmt.Println(len(letters)) for i := range letters { fmt.Println(i, letters[i]) } } func main() { letters := []string{"a", "b", "c", "d"} dump(letters) // clear the slice letters = nil dump(letters) // add stuff back to it letters = append(letters, "e") dump(letters) }
Sortie :
letters = [a b c d] 4 4 0 a 1 b 2 c 3 d letters = [] 0 0 letters = [e] 1 1 0 e
Comme démontré, définir la tranche sur zéro efface son contenu, y compris sa capacité. Cela permet une réutilisation efficace de la tranche sans aucune donnée persistante des opérations précédentes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!