创建方法和接口
本章节介绍如下方法
- 使用方法
- 创建方法集
- 使用方法和指针
- 使用接口
结构体让我们明白它是一种创建数据结构的方式,还知道可使用点表示法来访问结构体中的数据。然而,涉及更复杂的操作时,理解和处理起来就不那么容易了。Go 提供了另一种操作数据的方式——通过方法来操作。
1.1 使用方法
方法类型于函数,但有一点不同:在关键字 func 后面添加了另一个参数部分,用于接受单个参数。
type Movie struct{ Name string Rating float32 } func (m *Movie) summary() string{ //code }
请注意,在方法声明中,关键字 func 后面多一个参数——接收者。严格地说,方法接收者是一种类型,这里是指向结构体 Movie 的指针。接下来是方法名、参数以及返回类型。除多了包含接收者的参数部分外,方法与函数完全相同。可将接收者视为与方法相关联的东西。通过声明方法 summary,让结构体 Movie 的任何实例都可使用它。为何要使用方法,而不直接使用函数呢?例如,下面的函数与前面的方法声明等价:
type Movie struct{ Name string Rating float64 } func summary(m *Movie) string { //code }
函数 summary 和结构体 Movie 相互依赖,但它们之间没有直接关系。
例如,如果不能访问结构体 Movie 的定义,就无法声明函数 summary。如果使用函数,则在每个使用函数或结构体的地方,都需包含函数和结构体的定义,这会导致代码重复。另外函数发生任何改变,都必须随之修改多个地方。这样看来在函数与结构体关系密切时,使用方法更合理。
方法 summary 的实现将 float64 等级制转换为字符串并设置其格式。使用方法的优点在于,只需编写方法实现一次,就可以对结构体的任何势力进行调用。