Go学习笔记-方法和接口 | 青训营笔记

56 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第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{}表示,所有类型都实现了空接口,他的参数可以保存任何类型的值

嵌入式接口

可以在定义一个接口将所有的接口包含进来,这个接口合并了多个接口

指针接收器

当类型的方法为指针接收器时,接口变量必须接收指针,否则会编译错误