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