我还处于理解 Go 接口的早期阶段。我正在编写一些逻辑模拟,并具有类似以下代码的内容(我在这里进行了大量简化):
请参阅我的问题的评论:
type LogicNode struct {
Input *bool
Output *bool
Operator string
Next Node
}
func (n *LogicNode) Run() {
// do some stuff here
n.Next.Run()
}
type Node interface {
Run()
}
func main() {
nodes := make([]Node, 1000)
for i := 0; i < 1000; i++ {
n := LogicNode{
//assign values etc.
}
nodes[i] = &n
}
for i, node := range nodes {
// I need to access LogicNode's Output pointer here, as a *bool.
// so I can set the same address to other Node's Input thereby "connecting" them.
// but I could only get something like this:
x := reflect.ValueOf(node).Elem().FieldByName("Output")
// which is <*bool Value>
// I couldn't find a way to set a new *bool to the underlying (LogicNode) Struct's Input or Output..
}
}
我使用接口的原因是因为还有其他节点类型 FloatNode MathNode 等,它们具有不同的字段,但它们实现了自己的 run 方法。
我已经成功地使用了 Value 的 SetString 或 SetBool 方法,但无法在那里设置指针......提前致谢。
相关分类