Go笔记-方法

【方法的概念】
    在 Go 语言中,结构体就像是类的一种简化形式,那么面向对象程序员可能会问:类的方法在哪里呢?在 Go 中有一个概念,它和方法有着同样的名字,并且大体上意思相同:Go 方法是作用在接收者(receiver)上的一个函数,接收者是某种类型的变量。因此方法是一种特殊类型的函数
 
 
【方法的特点】
    1- 接收者类型可以是(几乎)任何类型,不仅仅是结构体类型:任何类型都可以有方法,甚至可以是函数类型,可以是 int、bool、string 或数组的别名类型。但是接收者不能是一个接口类型,因为接口是一个抽象定义,但是方法却是具体实现;如果这样做会引发一个编译错误。
    2- 最后接收者不能是一个指针类型,但是它可以是任何其他允许类型的指针
    3- 一个类型加上它的方法等价于面向对象中的一个类
        备注:区别是在 Go 中,类型的代码和绑定在它上面的方法的代码可以不放置在一起,它们可以存在在不同的源文件,唯一的要求是:它们必须是同一个包的,这也是为什么不在int、float或者类似的类型定义方法了。
    4- 因为方法是函数,所以同样的,不允许方法重载,即对于一个类型只能有一个给定名称的方法。
    5- 别名类型不能有它原始类型上已经定义过的方法
 
 
【定义方法的格式】
func (recv receiver_type) methodName(parameter_list)(return_value_list){...}
func (_ receiver_type) methodName(parameter_list)(return_value_list){...}
    说明:在方法名之前,func关键字之后的括号中指定receiver(接收类型);如果recv是receiver的实例,Method1是它的方法名,那么方法调用遵循传统的object.name选择器符号;如果recv是一个指针,Go会自动解除引用,不需要在手动*recv,直接使用recv.Method1;如果不需要recv的值可以用_代替recv;recv就像面向对象语言中的this或self
 
 
【举例】
 1 package main
 2  
 3 type TwoInts struct{
 4     a int
 5     b int
 6 }
 7  
 8 func main(){
 9     two1 := new(TwoInts)
10     two1.a = 10
11     two1.b = 12
12     func11 := two1.addThem()
13     func12 := two1.addToParam(1)
14  
15     two2 := TwoInts{3,4}
16     func21 := two2.addThem()
17     func22 := two2.addToParam(1)
18 }
19  
20 func(tn *TwoInts)addThem()int{
21     return tn.a + tn.b
22 }
23  
24 func(tn *TwoInts)addToParam(param int)int{
25     return tn.a + tn.b +param
26 }

【学习参考处:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md

 
原文地址:https://www.cnblogs.com/ymkfnuiwgij/p/7912311.html