在Go中修改结构中的结构切片

mgoldwasser:

在下面的示例中,a person具有一个friendships 的切片,我尝试将a初始化friendship为指向另一个person对象的指针,但是由于某种原因,它失败了,结果是没有人拥有任何friendships。我不是应该在应该使用的地方使用指针吗?

package main

import (
    "fmt"
    "math/rand"
)

type friendship struct {
    friend *person
}

type person struct {
    name       int
    friendship []friendship
}

func createPerson(id int) person {
    return person{id, make([]friendship, 0)}
}

func (p *person) addFriends(possibleFriends []*person, numFriends int) {
    var friend *person
    for i := 0; i < numFriends; i++ {
        friend = possibleFriends[rand.Intn(len(possibleFriends))]
        p.friendship = append(p.friendship, friendship{friend})
    }
}

func main() {
    numPeople := 20
    people := make([]person, numPeople)
    possibleFriends := make([]*person, numPeople)
    for i := 0; i < numPeople; i++ {
        people[i] = createPerson(i)
        possibleFriends[i] = &(people[i])
    }
    for _, p := range people {
        p.addFriends(possibleFriends, 2)
    }
    fmt.Println(people)
}
simon_xia:

for i := 0; i < numPeople; i++ {
        people[i].addFriends(possibleFriends, 2)
}

要么

 for i, _ := range people {
        people[i].addFriends(possibleFriends, 2)
 }

代替

 for _, p := range people {
        p.addFriends(possibleFriends, 2)
 }

这是因为p是的副本people[i]addFriends对切​​片没有影响people

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章