繁体   English   中英

附加到 golang 中的 struct slice

[英]Append to struct slice in golang

我努力寻找像我这样的例子,但尽管一堆问题非常相似,但我无法理解我做错了什么。

我对 golang 很陌生,我正在尝试实现生命游戏。

这是我的代码的一部分

// Species struct
type Species struct {
    xPos            int32
    yPos            int32
    isAlive         bool
    willChangeState bool
    rect            sdl.Rect
    neighbours      []Species
}

type Ecosystem struct {
    community []Species
}

func (ecos *Ecosystem) addSpecies(sp Species) {
    ecos.community = append(ecos.community, sp)
}

func (s *Species) addNeigbour(neigbour Species) {
    s.neighbours = append(s.neighbours, neigbour)
} 

我想在这个函数中分配邻居

func (ecos *Ecosystem) distributeNeighbours() {
    for _, species := range ecos.community {
        for _, potentionalNeighbour := range ecos.community {
            if math.Abs(float64(species.xPos-potentionalNeighbour.xPos)) <= speciesSize && math.Abs(float64(species.yPos-potentionalNeighbour.yPos)) <= speciesSize {
                if species.xPos == potentionalNeighbour.xPos && species.yPos == potentionalNeighbour.yPos {
                    continue
                }
                species.addNeigbour(potentionalNeighbour)
            }
        }
        fmt.Println(len(species.neighbours)) // works here
    }
    for _, s := range ecos.community {
        fmt.Println(len(s.neighbours)) //prints 0
    }
}

所以我想我必须用指针来管理它 - 一些问题,比如第一个循环中的物种是社区中该物种的副本,所以原始物种不会获得任何邻居。 但我不知道如何修复它。

尝试切片指针,如下所示:

// Species struct
type Species struct {
    xPos            int32
    yPos            int32
    isAlive         bool
    willChangeState bool
    rect            sdl.Rect
    neighbours      []*Species
}

type Ecosystem struct {
    community []*Species
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM