3 回答
TA贡献1772条经验 获得超5个赞
这是解决方案。指针总是令人困惑。
包主
import "fmt"
type child struct {
Name string
prnt *parent
}
func (p *child) Yell() {
fmt.Println("Child's yelling")
}
type parent struct {
Name string
Children []child
Memory []string
}
func (p *parent) Yell() {
fmt.Println("Parent's yelling")
}
func (p *parent) Remember(line string) {
p.Memory = append(p.Memory, line)
}
func main() {
p := parent{}
p.Name = "Jon"
boy1 := child{}
boy1.Name = "Jon's boy"
boy1.prnt = &p
girl1 := child{}
girl1.Name = "Jon's girl"
girl1.prnt = &p
p.Children = append(p.Children, boy1)
p.Children = append(p.Children, girl1)
fmt.Println(p)
p.Yell()
for i := 0; i < len(p.Children); i++ {
p.Children[i].Yell()
p.Children[i].prnt.Remember("test:" + p.Children[i].Name)
}
fmt.Println(p.Memory)
}
TA贡献1858条经验 获得超8个赞
您可以在子结构中添加指向父结构的指针
type child struct {
Name string
parent *parent
}
func (p *child) Yell() {
fmt.Println("Child's yelling")
p.parent.Remember(p.Name + " called")
p.parent.Yell()
}
TA贡献1852条经验 获得超7个赞
我只是 Golang 的初学者。
似乎Golang约定是类名的CamelCase,并且在继承基类(“Parent”)时不应分配变量名。 p.Parent将自动工作,即如下:
type Child struct {
*Parent // put at top
Name string
}
func (p *Child) Yell() {
fmt.Println("Child's yelling")
p.Parent.Remember(p.Name + " called")
p.Parent.Yell()
}
参考:
http://arch-stable.blogspot.hk/2012/05/golang-call-inherited-constructor.html
https://medium.com/@simplyianm/why-gos-structs-are-superior-to-class-based-inheritance-b661ba897c67
其他一些示例使用非指针 Parent 继承,例如:
type Child struct {
Parent // put at top
Name string
}
不确定哪一个更正式和方便
- 3 回答
- 0 关注
- 120 浏览
添加回答
举报