【发布时间】:2015-06-24 00:21:12
【问题描述】:
这是我正在尝试编写的真实世界代码的一部分。问题是Go复制了接口sibling所以我不能修改数据。但是,如果我改为使用指向接口的指针,那么相等的概念就会失败。我知道我可以使用DeapEquals,但不能在地图中使用。
package main
import (
"fmt"
)
type Q interface {
modify()
}
type P struct {
name string
sibling Q
}
func (x P) modify() {
x.name = "a"
}
func main() {
a := P{"a", nil}
A := P{"?", nil}
b := P{"b", a}
B := P{"b", A}
B.sibling.modify()
fmt.Println(B)
fmt.Println(b == B)
}
如何让Go让我自己修改界面数据而不复制和修改副本?
似乎这些在结构上是互斥的:
- 我需要能够使用地图
- 我需要能够使用方法修改接口数据
【问题讨论】:
标签: go reference pass-by-reference