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

我有一个或多或少复杂结构的切片,我希望这个切片的所有元素都可以通过地图访问。映射包含指向切片元素的指针。我现在的问题是,当我更改切片元素的内容时,它不会反映在指向该元素的地图中。即如果我从切片访问更改的元素,我会看到更改。但是,如果我从地图访问元素,则看不到更改。


我做了一个抽象的代码示例,你会在下面找到。在这里它变得更加奇怪,因为我看到了一个元素的变化,尽管所有元素都应该改变。


package main


import "fmt"


type Test struct {

    one int

    two *string

}


type List []Test

type MapToList map[int]*Test


func 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)

    }

}

输出是:


Orginal

0 1 one

1 2 two

2 3 three

Modified List

0 1 xxx

1 2 xxx

2 3 xxx

Modified Map

1 1 one

2 2 two

3 3 xxx


白衣非少年
浏览 195回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go