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

假设我有个Person struct

type Person struct{}

type Man struct{

Person

}

type Human struct {

Person

}

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

阅读 4.6k
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 中要实现继承效果,可以通过组合实现。或者使用接口方式。

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题