是否可以在不使用嵌入式结构的情况下继承某种类型的方法?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