0
我想實現一個鏈接列表節點。每個節點可以是不同的類型(Foo,Bar和Baz--將有40-50個不同的節點),每種類型都有共同的字段(prev,next,...)和一些特定於節點的字段。執行「通用」節點列表
我很難想出一個看起來合理的解決方案。現在的問題是:我可以採取什麼方法讓這更優雅?
這裏是我的(虛擬)main.go
:
package main
import (
"fmt"
"node"
)
func main() {
a := node.NewFoo()
fmt.Println(a)
b := node.NewBar()
fmt.Println(b)
node.Append(a, b)
}
,這裏是我的實現(node.go
):
package node
type Node interface {
}
type FooNode struct {
prev Node
next Node
FieldSpecificToFoo int
}
type BarNode struct {
prev Node
next Node
FieldSpecificToBar int
}
type BazNode struct {
prev Node
next Node
FieldSpecificToBaz int
}
func NewFoo() *FooNode {
return &FooNode{}
}
func NewBar() *BarNode {
return &BarNode{}
}
func NewBaz() *BazNode {
return &BazNode{}
}
func Append(a, b Node) {
// set next and prev pointer
switch v := a.(type) {
case FooNode:
v.next = b
case BarNode:
v.next = b
case BazNode:
v.next = b
}
switch v := b.(type) {
case FooNode:
v.prev = a
case BarNode:
v.prev = a
case BazNode:
v.prev = a
}
}
這顯然是一個非常糟糕的實現。在這種情況下我能做什麼?
謝謝!有時候解決方案很簡單。我想你明白我的問題。 – topskip