一.介绍
Golang中的方法是作用在指定的数据类型上的(即:和指定的数据类型绑定),因此自定义类型,都可以有方法,而不仅仅是struct
方法的声明和调用
type A struct{
Num int
}
func (a A)test(){ //
fmt.Println(a.Num)
}
说明:1.表示 A 结构体有一个方法叫 test
2.(a A)体现test方法是和A类型绑定的,a是形参可以任意改变,不是固定的
1.test()方法只能通过Person类型的变量来调用,而不能直接调用,也不能使用其它类型变量
小案例:
1.给person结构体jisuan方法,接收一个数n,计算从1到n的和
2.给person结构体添加getsum方法,计算两个数的和,并返回结果
方法的调用和传参机制原理:
说明:方法的调用和传参机制和函数基本一样,不一样的地方是方法调用时,会将调用方法的变量,当做实参也传递给方法。
方法注意事项和细节讨论
1.结构体类型是值类型,在方法调用中,遵守值类型的传递机制,是值拷贝传递方式
2.如果程序员希望在方法中,修改结构体变量的值,可以通过结构体指针的方式来处理
3.Golang中的方法作用在指定的数据类型上的(即:和指定的数据类型绑定),因此自定义类型,都 可以有方法,而不仅仅是struct,比如int,float32等都可以有方法
4.方法的访问范围控制的规则,和函数一样。方法名首字母小写,只能在本包访问,方法首字母 大写,可以在本包和其他包访问
5.如果一个变量实现了String()这个方法,那么fmt.Println默认会调用这个变量的string()输出
方法的声明定义
func (receiver type)methodName(参数列表)(返回值列表){
方法体
return 返回值
}
1.参数列表:表示方法输入
2.receiver type:表示这个方法和type这个类型进行绑定,或者说该方法作用于type类型
3.receiver type:type可以是结构体,也可以其他的自定义类型
4.reciver:就是type类型的一个变量(实例) 比如:Person结构体的一个变量(实例)
5.返回值列表:表示返回的值可以是多个
6.方法主体:表示为了实现某一功能代码块
7.return语句不是必须的
方法和函数的区别
1.调用方式不一样
函数的调用方式: 函数名(实参列表)
方法的调用方式: 变量.方法名(实参列表)
2.对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然
3.对于方法(如:struct方法),接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以
面对面编程应用实例