圍棋

2017-03-07 92 views
0

修改結構內的結構片在下面的例子中,一個personfriendship秒的片,我嘗試初始化friendship作爲指針到另一個person對象,但由於某種原因失敗,而結果是沒有人有任何friendship s。我不在某處應該使用指針嗎?圍棋

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) 
} 
+0

http://stackoverflow.com/questions/15945030/change-values-while-iterating-in-golang – Fallen

回答

2

使用

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

這是因爲ppeople[i]副本,addFriends沒有EFF ECT片上people

+0

更好,但我們可以做 '因爲我:=不等人{ 人[我] .addFriends(possibleFriends,2) }' – mgoldwasser