Go语言学习笔记 - PART8 - 方法

前言

  • Go的方法是作用在接收者上的一个函数,接收者是某种类型的变量,因此方法是一种特殊的函数
  • 接收者不能是接口类型,因为接口是一个抽象定义,但是方法是一个具体实现
  • 接收者是指针类型变量的时候,可以改变接收者变量的值

方法定义

func (recv receiver_type) methodName(parameter_list) (return_value_list) { ... }
复制代码
  • 在方法名之前,func关键字之后的括号中指定接收者
  • recv类似于面向对象语言中的this或self,Go中并没有这两个关键字

Go中的面向对象

  • 结构体 + 方法 = 面向对象中的类
  • 结构体和方法可以放在不同的源文件,但是必须在同一个包

如果想要打破这条规则,可以为类型定义别名,然后再为别名定义方法,这样就可以不在同一个包下

  • 类型T(或者*T)上的所有方法的集合叫做类型T(或*T)的方法集

方法不允许重载

方法实际上也是函数,函数不能重载

  • 基于接收者类型的方法重载是允许的
// 接收者类型不一样的时候,允许方法重载
func (receiver receiverType1) func1 (args... argType) returnType 
func (receiver receiverType2) func1 (args... argType) returnType 
复制代码

非结构体类型变量调用方法的实现方式


// 1. 给非结构体类型定义别名
type IntVector []int

// 2. 创建方法
func (v IntVector) sum() (s int){
    for _, x := range v {
        s += x
    }
    return
}

func main(){
    // 3. 调用方法
    IntVector{1,2,3}.sum();
}

复制代码

函数和方法的区别

  • 函数将变量作为参数
  • 方法在变量上被调用
  • 接收者类型跟方法必须在同一个包中

入门教程推荐: github.com/Unknwon/the…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值