gpt4 book ai didi

go - 无法更新结构中的 map slice

转载 作者:行者123 更新时间:2023-12-01 22:45:28 24 4
gpt4 key购买 nike

我正在尝试更新结构中的 map slice 。它失败: slice 保持不变。请查看游乐场:https://play.golang.org/p/FIcLgyj2FE-
任何帮助深表感谢

package main

import (
"encoding/json"
"fmt"
)

type Zoo struct {
Animals []map[string]string
}

func (zoo *Zoo) addAnimalData(el map[string]string) {
zoo.Animals = append(zoo.Animals, el)
}


func main() {
result := make(map[string]Zoo)
sfZoo := Zoo{
Animals: make([]map[string]string, 0),
}
result["San Francisco Zoo"] = sfZoo
animals := make(map[string]string)
animals["elephant"] = "Vegetarian"
animals["bear"] = "Omnivore"
sfZoo.addAnimalData(animals)

jsonified, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(jsonified))
}

最佳答案

问题是您将映射添加到sfZoo,而不是添加到结果映射中的Zoo实例。当您将sfZoo添加到result映射时,您添加了Zoo实例的副本。将新元素添加到sfZoo时,是将它们添加到sfZoo.Animals而不是result["San Francisco Zoo"].Animals中。

解决该问题的最简单方法是将结果声明为:

    result := make(map[string]*Zoo)


    result["San Francisco Zoo"] = &sfZoo

关于go - 无法更新结构中的 map slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58942901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com