为了账号安全,请及时绑定邮箱和手机立即绑定

修改后的切片元素无法通过地图访问。我究竟做错了什么?

修改后的切片元素无法通过地图访问。我究竟做错了什么?

Go
白衣非少年 2021-09-20 10:51:42
我有一个或多或少复杂结构的切片,我希望这个切片的所有元素都可以通过地图访问。映射包含指向切片元素的指针。我现在的问题是,当我更改切片元素的内容时,它不会反映在指向该元素的地图中。即如果我从切片访问更改的元素,我会看到更改。但是,如果我从地图访问元素,则看不到更改。我做了一个抽象的代码示例,你会在下面找到。在这里它变得更加奇怪,因为我看到了一个元素的变化,尽管所有元素都应该改变。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
提交
取消
意见反馈 帮助中心 APP下载
官方微信