[英]Modifying a struct slice within a struct in Go
在下面的例子中,一個person
擁有一片friendship
S,我嘗試初始化friendship
作為指針到另一個person
的對象,但由於某種原因失敗了,其結果是,沒有人有任何friendship
秒。 我不是應該在應該使用的地方使用指針嗎?
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)
}
采用
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
沒有影響
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.