8. Go-结构体方法

本文探讨了Go语言中的结构体方法,包括如何定义方法、使用指针接收者、理解方法的继承与重写,以及面向过程与面向对象的对比。方法作为结构体或任何类型的功能,强调了其作用对象,而在Go中,尽管没有重载方法,但可以通过不同的接收者类型实现方法的重写。此外,指针接收者在处理大对象时能避免复制,并且接受nil作为合法的接收者。
摘要由CSDN通过智能技术生成

结构体方法

Go语言同时有函数和方法,方法的本质是函数,但是方法和函数又具有不同点。

函数function是一段具有独立功能的代码,可以被重复多次调用,从而实现代码复用。

方法method是一个类的行为功能,只有该类的对象才能调用。

Go语言的方法method是一种作用于特定类型变量的函数。这种特定类型的函数叫做Receiver接收者的概念类似于传动面向对象语言中的this或者self关键字。

Go语言的接收者强调了方法具有作用对象,而函数没有作用对象。

Go语言中,接收者的类型可以是任何类型,不仅仅是结构体,也可以是struct类型外的任何类型。(如整形、字符串、slice、map、甚至函数等)

只要接收者不同,则方法名可以一样。

有重写方法 无重载方法(不支持重载方法,也就是说,不能定义名字相同但是不同参数的方法)

定义方法

接收者可以是struct类型或非struct类型,可以是指针类型和非指针类型。

接收者中的变量在命名时,官方建议使用接收者类型的第一个小写字母。

// 定义方法的语法格式:
func (接收者变量 接收者类型) 方法名(参数列表) (返回值列表){
   
    //方法体
}

// 定义结构体
type point struct {
   
    X int
    Y int
}

// 定义结构体方法
func (p point) print() {
   
    fmt.Println(p.X, p.Y)
}

指针接收者

go函数会复制每一个实参变量,如果一个实参太大而我们希望避免复制整个实参,可以使用指针来传递变量的地址。

指针接收者在调用方法的时候,编译器会对变量进行隐式转换。

type point struct {
   
    X int
    Y int
}
func (p point) Print() {
   
    fmt.Println(p.X, p.Y)
}
func (p *point) ScaleBy(factor int) {
   
    p.X *&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值