是否可以在不使用嵌入式結構的情況下繼承某種類型的方法?Golang嵌入結構
第一個代碼片段工作嵌入了Property
結構中Node
代碼,我能夠調用node.GetString
這是上Properties
的方法。我不喜歡這件事的是當我初始化Node
我有(?)初始化其中的Properties
結構。有沒有解決的辦法?
package main
import "fmt"
type Properties map[string]interface{}
func (p Properties) GetString(key string) string {
return p[key].(string)
}
type Nodes map[string]*Node
type Node struct {
*Properties
}
func main() {
allNodes := Nodes{"1": &Node{&Properties{"test": "foo"}}} // :'(
singleNode := allNodes["1"]
fmt.Println(singleNode.GetString("test"))
}
最終,我想要做類似下面的事情。其中Node
的類型爲Properties
,初始化也不需要初始化Property
結構。以下代碼不起作用,但可能會清楚我的目標是什麼。
package main
import "fmt"
type Properties map[string]interface{}
func (p Properties) GetString(key string) string {
return p[key].(string)
}
type Nodes map[string]*Node
type Node Properties
func main() {
allNodes := Nodes{"1": &Node{"test": "foo"}} // :)
singleNode := allNodes["1"]
fmt.Println(singleNode.GetString("test")) // :D
}
我會補充說,將使用Properties
的方法,這就是爲什麼我要求更多的結構。如果我只有Node
,我只會有方法Node
並完成。但是,因爲我將有超過Node
我覺得那種多餘的同樣的方法添加到所有的,嵌入Properties
我想更確切的問題,我想用從Node
Properties
方法,而不必在結構初始化Properties
。
對我來說聽起來像你可能可能只是寫函數接受一個「屬性」對象的實例,並對其進行操作,而不是將它們附加到它。這是嵌入在Go中的工作方式,雖然...所以我不確定這些方法。組成,而不是繼承。 –
由於某種原因,嵌入稱爲嵌入;)所有屬性字段都嵌入到節點中。 – kostya