Go语言中能否定义带方法的类型?如何让Gents类型调用Age方法?
关于Go语言类型定义与方法调用的问题
问题解答
可以为包含方法的类型进行类型定义,但要注意:Go中通过type 新类型 原类型创建的是全新的独立类型,它仅继承原类型的字段结构,不会自动继承原类型的方法。所以你原代码里g1.Age()会报错,因为Gents类型本身没有Age方法。
代码修改方案
方案1:为Gents类型实现Age方法(保持类型独立性)
如果需要Gents作为独立类型存在,可以为它单独实现Age方法,并在内部复用原Man类型的方法逻辑:
package main type Man struct { } func (man *Man) Age() { } type Gents Man // 为Gents类型实现Age方法 func (g *Gents) Age() { // 将Gents转换为Man类型,调用原方法 (*Man)(g).Age() } func main() { var m1 Man m1.Age() var g1 Gents g1.Age() // 现在可正常调用 }
方案2:使用类型别名(共享原类型方法)
如果不需要Gents作为独立类型,只是想给Man起一个别名,可以用type Gents = Man的语法,此时Gents和Man是同一个类型,自然可以调用所有原方法:
package main type Man struct { } func (man *Man) Age() { } // 类型别名,Gents与Man为同一类型 type Gents = Man func main() { var m1 Man m1.Age() var g1 Gents g1.Age() // 正常调用 }
内容的提问来源于stack exchange,提问作者MariaLurduRaj.A
相关产品推荐
相关产品推荐

