Is it possible to inherit methods of a type without using embedded structs?
The first snippet of code is working code that embeds the Property
struct in Node
and I'm able to call node.GetString
that's a method on Properties
. The thing I don't like about this is when I initialize Node
I have(?) to initialize the Properties
struct within it. Is there a way around this?
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"))
}
Ultimately, I would like to do something like the following. Where Node
is of type Properties
and initializing does not require initializing a Property
struct too. The following code doesn't work but may be clear what my goal is.
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
}
I'll be adding more structs that will use Properties
's methods which is why I'm asking. If I only had Node
, I would just have methods for Node
and be done. But because I'll have more than Node
I find it kind of redundant to add the same methods to all the structs that embed Properties
I guess more to the exact problem, I want to use Properties
methods from Node
without having to initialize Properties
.