我有一个或多或少复杂结构的切片,我希望这个切片的所有元素都可以通过地图访问。映射包含指向切片元素的指针。我现在的问题是,当我更改切片元素的内容时,它不会反映在指向该元素的地图中。即如果我从切片访问更改的元素,我会看到更改。但是,如果我从地图访问元素,则看不到更改。我做了一个抽象的代码示例,你会在下面找到。在这里它变得更加奇怪,因为我看到了一个元素的变化,尽管所有元素都应该改变。package mainimport "fmt"type Test struct { one int two *string}type List []Testtype MapToList map[int]*Testfunc MakeTest() (t List, mt MapToList) { t = []Test{} mt = make(map[int]*Test) var one, two, three string one = "one" two = "two" three = "three" t = append(t, Test{1, &one}) mt[1] = &t[len(t)-1] t = append(t, Test{2, &two}) mt[2] = &t[len(t)-1] t = append(t, Test{3, &three}) mt[3] = &t[len(t)-1] return}func (s *List) Modify() { for index := range *s { var str string = "xxx" (*s)[index].two = &str }}func main() { t, mt := MakeTest() fmt.Println("Orginal") for index := range t{ fmt.Println(index, t[index].one, *t[index].two) } t.Modify() fmt.Println("Modified List") for index := range t{ fmt.Println(index, t[index].one, *t[index].two) } fmt.Println("Modified Map") for key, value := range mt { fmt.Println(key, value.one, *value.two) }}输出是:Orginal0 1 one1 2 two2 3 threeModified List0 1 xxx1 2 xxx2 3 xxxModified Map1 1 one2 2 two3 3 xxx
1 回答
- 1 回答
- 0 关注
- 193 浏览
添加回答
举报
0/150
提交
取消