Maison >développement back-end >Golang >Comment effacer efficacement une tranche dans Go et libérer sa mémoire sous-jacente ?

Comment effacer efficacement une tranche dans Go et libérer sa mémoire sous-jacente ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-21 05:36:11596parcourir

How do you effectively clear a slice in Go and release its underlying memory?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn