这是我参与「第五届青训营 」伴学笔记创作活动的第5天
方法
方法时带有特殊的接收者参数的函数,这个接收者参数位于func关键字和方法名之间
创建方法
type Vertex struct{
X, Y int
}
func (v Vertex) sqrt() int{
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
通过结构体点号调用方法,该方法计算结构体字段对应值的平方根
- Go语言不允许为简单的内置类型添加方法
- Go只能为在同一个包内的类型定义方法
指针接收者
- 上面的接收者为值接收者,我们所操作的都是接收者值的副本,因此该方法并不能改变类型中的值,若想改变类型中的值,需要用到指针接收者,即在原类型前加*
- 当方法的接收者为指针接收者时,值也可以直接调用方法,该值将会被解释为指针
- 当方法的接收者为值时,值和指针都可以调用该方法,以指针调用时,该指针会被解引用,意味着还是以值的方式调用方法
- 使用指针接收者不仅可以改变接收者的值,还可以避免在每次调用时都赋值该值,这样会更加高效
接口
接口是一组方法签名的集合,接口定义了类型的行为;接口仅提供方法名称,输入参数和返回类型组成的方法签名集合,由类型来声明方法并实现他们
定义接口
使用类型别名,关键字interface来简化接口声明
type I interface{
fun() int
}
实现接口
为类型声明接口中的全部方法,就说该类型实现接口
空接口
当接口没有方法时,被称为空接口,用interface{}表示,所有类型都实现了空接口,他的参数可以保存任何类型的值
嵌入式接口
可以在定义一个接口将所有的接口包含进来,这个接口合并了多个接口
指针接收器
当类型的方法为指针接收器时,接口变量必须接收指针,否则会编译错误