L'éditeur php Baicao discutera d'un problème concernant la mise à jour de la valeur d'une tranche dans Golang dans cet article : lorsque nous mettons à jour la valeur dans une tranche, pourquoi la valeur dans l'objet conteneur n'est pas mise à jour en conséquence. Ce problème est souvent rencontré par les développeurs utilisant Golang, nous allons donc en examiner les raisons et proposer des solutions. Que vous soyez débutant ou développeur expérimenté, en lisant cet article, vous pourrez mieux comprendre les opérations de découpage dans Golang.
package main import ( "fmt" ) func main() { root := map[string]interface{} { "disney": "world", } fmt.Printf("main begin %v\n", root) addList(root) fmt.Printf("main after addList %v\n", root) addMap(root) fmt.Printf("main after addMap %v\n", root) } func addList(root map[string]interface{}) { root["list"] = make([]interface{},0,3) mylist := root["list"] mylist = append(mylist.([]interface{}),"mickeymouse") fmt.Printf("addList %v\n", mylist) fmt.Printf("addList %v\n", root) } func addMap(root map[string]interface{}) { root["map"] = make(map[string]interface{}) mymap := root["map"] mymap.(map[string]interface{})["donald"] = "duck" fmt.Printf("addMap %v\n", mymap) fmt.Printf("addMap %v\n", root) }
J'ai une carte racine qui contient la paire "disney" -> "monde". Dans cette carte racine, j'ai ajouté une tranche avec "mickeymouse" dans la fonction addlist, puis j'ai ajouté une carte avec la paire "donald" -> "duck" dans la fonction addmap. Cependant, la tranche n’est pas ajoutée et la carte est ajoutée à la carte racine. Le sous-mapping est un comportement attendu, mais l'ajout de tranches semble être un comportement anormal. Je pense qu'une tranche est une référence, comme une carte en golang. Comment ça se passe ? Cela devrait fonctionner en Java. Où est-ce que je me suis trompé? Comment puis-je le faire fonctionner ? Dans le problème plus important, je n'ai pas d'autre option pour renvoyer autre chose qu'une erreur dans la fonction.
append
La fonction renvoie une nouvelle tranche. map
ne génère pas de nouvelle carte. Il est donc naturel que vous ne voyiez pas les nouvelles tuiles, mais vous voyez que le contenu de la carte a été mis à jour.
Comment puis-je le faire fonctionner ?
Stockez la nouvelle tranche à la place de l'ancienne, par ex.
mylist := root["list"] mylist = append(mylist.([]interface{}),"mickeymouse") root["list"] = mylist // or, doing it on one line root["list"] = append(root["list"].([]any), "mickeymouse")
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!