Maison > développement back-end > Golang > Comment convertir correctement une tranche de chaînes en une tranche de pointeurs en chaînes en Go ?

Comment convertir correctement une tranche de chaînes en une tranche de pointeurs en chaînes en Go ?

Linda Hamilton
Libérer: 2024-12-19 20:22:17
original
692 Les gens l'ont consulté

How to Correctly Convert a Slice of Strings to a Slice of Pointers to Strings in Go?

Comment convertir une tranche de chaînes en une tranche de pointeurs en chaînes

Lorsque vous travaillez avec des tranches de chaînes, il est souvent nécessaire de convertir les vers des tranches de pointeurs vers des chaînes. Cela vous permet d'accéder directement aux valeurs de chaîne sous-jacentes, plutôt que d'avoir à les déréférencer à chaque fois.

Première tentative

Une approche pour y parvenir consiste à parcourir le tranche de chaînes et ajoutez l’adresse de chaque chaîne à une nouvelle tranche. Cependant, cela ne fonctionne pas comme prévu car la variable de boucle v est affectée à chaque itération, modifiant sa valeur mais pas son adresse. En conséquence, vous vous retrouvez avec une tranche de pointeurs qui pointent tous vers la même adresse.

values1 := []string{"a", "b", "c"}
var values2 []*string
for _, v := range values1 {
    fmt.Printf("%p | %T\n", v, v)
    values2 = append(values2, &v)
}
fmt.Println(values2)
// Output:
// %!p(string=a) => string
// %!p(string=b) => string
// %!p(string=c) => string
// [0xc42000e1d0 0xc42000e1d0 0xc42000e1d0]
Copier après la connexion

Solution correcte

Pour créer correctement une tranche de pointeurs aux chaînes, vous devez ajouter l'adresse de l'élément slice approprié de la tranche d'origine :

for i := range values1 {
    values2 = append(values2, &values1[i])
}
Copier après la connexion

Dans ce cas, la variable de boucle i est utilisée pour index dans la tranche d'origine, en garantissant que chaque adresse ajoutée aux valeurs 2 correspond à une chaîne unique dans les valeurs 1.

Solution alternative

Une solution alternative consiste à créer des variables locales temporaires et ajoutez les adresses de ceux-ci :

for _, v := range values1 {
    v2 := v
    values2 = append(values2, &v2)
}
Copier après la connexion

Cette approche est indépendante de la tranche d'origine et toute modification apportée aux valeurs1 n'affectera pas valeurs2.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal