3
我處於瞭解Go的界面的初期階段。我正在寫一些邏輯模擬和有類似下面的代碼(我嚴重簡化這裏):Golang - 通過接口獲取指向結構體字段的指針
請參閱我的問題的意見:
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等,但它們實現自己的運行方法。
我已經成功地使用Value的SetString或SetBool方法,但不能設置一個指針那裏...在此先感謝。
爲什麼不直接將Node轉換爲LogicNode並直接訪問字段? – Arjan
好的建議,那是另一個解決方案。如果種類相當多,領域也不那麼多,那就不是很明顯,哪個更好。 – Zoltan