簡體   English   中英

在Go中修改結構中的結構切片

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM