golang 方法重写
更新时间:2023-10-18什么是golang方法重写
在golang语言中,方法重写指的是子类或者结构体使用与父类或接口中同名同参数的方法,从而覆盖父类或者接口中的方法实现,从而实现不同的方法行为
//父类定义方法
type Parent struct{}
func (p *Parent) Say() {
fmt.Println("I am parent")
}
//子类重写父类方法
type Child struct {
Parent
}
func (c *Child) Say() {
fmt.Println("I am child")
}
golang中结构体的方法重写
在golang语言中,定义一个结构体可以为其增加方法,通过方法重写,我们可以在子类中使用相同的方法名和参数,从而重载结构体中的方法实现。
//父类定义方法
type Parent struct {
x, y int
}
func (p *Parent) sum() int {
return p.x + p.y
}
//子类重写父类中的方法
type Child struct {
Parent
}
func (c *Child) sum() int {
return c.x + c.y + 10 //增加行为
}
golang中接口的方法重写
在golang语言中,如果一个类型实现了某个接口,我们就可以在其中重写这个接口对应的方法,以实现不同的方法行为。接下来我们将通过例子演示golang中的接口重写。
//定义接口
type IUser interface {
GetName() string
}
//父类实现接口
type Parent struct{}
func (p *Parent) GetName() string {
return "I am parent"
}
//子类重写父类中实现的接口方法
type Child struct {
Parent
}
func (c *Child) GetName() string {
return "I am child"
}
golang中方法重写的使用场景
在golang语言中,方法重写使用最广泛的场景是继承和多态。以优秀的第三方库gorm为例,gorm中的Model()方法包含了大量的初始化代码和构造方法,我们就可以在结构体中通过方法重写,增加自定义的方法和属性,从而实现更好的代码复用。另外,方法重写还可以在实现多态时使用,即通过接口定义规范,通过方法重写实现不同的方法行为,便于扩展。
//gorm代码示例
type User struct {
ID uint
Name string
Age int
Address string
CreatedAt time.Time
UpdatedAt time.Time
}
//增加自定义的方法和属性
type ChildUser struct {
User
}
func (u *ChildUser) Print() {
fmt.Printf("name:%s age:%s address:%s", u.Name, u.Age, u.Address)
}