Maison > développement back-end > Golang > Comment modifier les champs Struct dans les valeurs Go Map ?

Comment modifier les champs Struct dans les valeurs Go Map ?

DDD
Libérer: 2024-11-28 19:51:11
original
964 Les gens l'ont consulté

How to Modify Struct Fields Within Go Map Values?

Adressage des valeurs de carte

Dans Go, tenter de modifier un champ de structure directement dans une valeur de carte, comme le montre l'exemple suivant, entraîner une erreur de compilation :

import (
    "fmt"
)

type pair struct {
    a float64
    b float64
}

func main() {
    // Create a map where values are of the "pair" type.
    dictionary := make(map[string]pair)

    // Add an element to the map.
    dictionary["xxoo"] = pair{5.0, 2.0}

    fmt.Println(dictionary["xxoo"]) // Output: {5 2}

    // Attempt to modify a field within the map value.
    dictionary["xxoo"].b = 5.0 // Error: cannot assign to dictionary["xxoo"].b
}
Copier après la connexion

Ce message d'erreur est rencontré car les valeurs de la carte ne sont pas adressables. L'adressabilité est un concept fondamental dans Go et fait référence à la capacité de localiser l'adresse mémoire d'une variable. Les valeurs non adressables ne peuvent pas être modifiées indirectement, car tenter d'accéder à un champ de structure d'une valeur non adressable entraîne une erreur de compilation.

Pour résoudre ce problème, il existe deux approches principales :

Utilisation des valeurs de pointeur

Une approche consiste à utiliser une valeur de pointeur comme valeur de carte. Cette indirection rend la valeur adressable, permettant des modifications de champ. Voici un exemple :

import (
    "fmt"
)

type pair struct {
    a float64
    b float64
}

func main() {
    // Create a map where values are pointers to "pair" structs.
    dictionary := make(map[string]*pair)

    // Add an element to the map.
    dictionary["xxoo"] = &pair{5.0, 2.0}

    fmt.Println(dictionary["xxoo"]) // Output: &{5 2}

    // Modify a field within the pointed-to struct.
    dictionary["xxoo"].b = 5.0

    fmt.Println(dictionary["xxoo"].b) // Output: 5
}
Copier après la connexion

Copie ou remplacement de valeur

Vous pouvez également travailler avec des valeurs non adressables en copiant la valeur ou en la remplaçant entièrement. Voici deux exemples :

// Value Copying
dictionary["xxoo"] = pair{5.0, 5.0}
Copier après la connexion
// Value Replacement
p := dictionary["xxoo"]
p.b = 5.0
dictionary["xxoo"] = p
Copier après la connexion

Ces deux approches vous permettent de modifier la structure « paire » dans la carte.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal