Maison >développement back-end >Golang >Comment modifier les champs Struct dans les valeurs Go Map ?
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 }
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 }
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}
// Value Replacement p := dictionary["xxoo"] p.b = 5.0 dictionary["xxoo"] = p
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!