Go 附加到切片的多个实例

Go 附加到切片的多个实例,go,Go,如果我有两个指向片s1、s2的指针,它们最初指向同一个片,是否可以附加到其中一个片上,让另一个片也指向更新的片?这似乎是一个问题,因为如果容量不足,附加到切片可能会生成一个新切片,其中包含复制的条目 下面是一个稍微复杂的版本,它更接近我的用例。也就是说,我有一些节点,它们有一个指向(全局)队列的指针,该队列由一个切片实现。当一个节点更新全局队列时,我希望它反映在另一个节点指向的切片中 添加一个间接层,即指针,可以帮助您解决这个问题 添加一个间接层,即指针,可以帮助您解决这个问题 packag

如果我有两个指向片s1、s2的指针,它们最初指向同一个片,是否可以附加到其中一个片上,让另一个片也指向更新的片?这似乎是一个问题,因为如果容量不足,附加到切片可能会生成一个新切片,其中包含复制的条目

下面是一个稍微复杂的版本,它更接近我的用例。也就是说,我有一些节点,它们有一个指向(全局)队列的指针,该队列由一个切片实现。当一个节点更新全局队列时,我希望它反映在另一个节点指向的切片中


添加一个间接层,即指针,可以帮助您解决这个问题


添加一个间接层,即指针,可以帮助您解决这个问题

package main

import (
    "fmt"
)

type queue *[]int

type node struct {
    id int
    list *queue
}

func (n *node) mutate(){
    newSlice := append(**n.list, 1)
    *n.list = &newSlice
}
func (n *node) get(idx int) int{
    return (*(*[]int)(*n.list))[idx]
}

func main() {
    /* Make empty queue */
    s:=make([]int, 0)
    q1:=queue(&s)
    fmt.Println(q1)

    /* Make new nodes */
    n1 := new(node)
    n1.id = 0
    n1.list = &q1
    fmt.Println(n1)

    n2 := new(node)
    n2.id = 1
    n2.list = n1.list
    fmt.Println(n2)

    /* Mutate node in n1 */
    n1.mutate()
    fmt.Println(n1, n2) // n1.list != n2.list
    fmt.Println(n1.list, n2.list)
    fmt.Println(n1.get(0))
    n2.mutate()
    fmt.Println(n2.get(0))
}