golang 函数参数如何用一个公共struct

暂停_学
  • 33

假设我有个Person struct

type Person struct{}

type Man struct{

Person

}

type Human struct {

Person

}

现在我想要一个函数p(a Person)参数是Person类型, 然后我想定义一个Man跟Human实例, 可以调用p这个方法, 请问怎么实现呢

回复
阅读 2.1k
3 个回答

可以先定义和接口, 然后man和human去实现这个接口

type Person struct {
    
} 

type P interface {
    p(a Person)
}

type Man struct {
    
}

func (m *Man) p(a Person)  {
    
}

type Human struct {

}

func (m *Human) p(a Person)  {

}

实现接口的这种方式, 当一个有一个函数参数是P时, 传的参可以是Man,也可以是Human, 通过实现同一个接口实现多态

func person(p P)  {
    
}

如果只是单纯的想要给struct添加方法, 下面就可以

type Man struct {

}

func (m *Man) p(a Person)  {

}

type Human struct {

}

func (m *Human) p(a Person)  {

}

接口方式如果不是题主想要的话,可以尝试如下

type Person struct {}

type Man struct {
    Person
}

type Human struct {
    Person
}

func p(a Person) {
    fmt.Println("in p")
}

m := Man{Person{}}
p(m.Person)

Go 没有继承,完全符合题主要求的方式是无法实现的。Go 中要实现继承效果,可以通过组合实现。或者使用接口方式。

前面答主分别介绍了这两种方式。

宣传栏