Go 创建方法集,方法集是可对特定数据类型进行调用的一组方法。在Go语言中,任何数据类型都可有相关联的方法集,这让您能够在数据类型和方法之间建立关系,如前面的结构体Movie示例所示。方法集可包含的方法数量不受限制,这是一种封装功能和创建库代码的有效方式。
处理球体时,假设您要计算其表面积和体积。在这种情况下,非常适合使用结构体和方法集。通过使用方法集,您只需创建一次计算代码,就可将其重用于任何球体。要创建这个方法集,可声明结构体Sphere,再声明两个将结构体Sphere作为接收者的方法。
type Sphere struct {
Radius float64
}
func (s *Sphere) SurfaceArea() float64 {
return float64(4) * math.Pi * (s.Radius * s.Radius)
}
func (s *Sphere) Volume() float64 {
radiusCubed := s.Radius * s.Radius * s.Radius
return (float64(4) / float64(3)) * math.Pi * radiusCubed
}
这里声明了计算球体表面积和体积的方法,并像通常那样定义函数签名。唯一不同的是添加了一个表示接收者的参数,这里是一个指向Sphere实例的指针。就本文而言,方法使用的公式并不重要,它们都是标准的数学公式。然而,需要指出的是,在方法中可以访问结构体的Radius值,这是使用点表示法访问的。如下程序定义了一个与结构体相关联的方法集。
package main
import (
"fmt"
"math"
)
type Sphere struct {
Radius float64
}
func (s *Sphere) SurfaceArea() float64 {
return float64(4) * math.Pi * (s.Radius * s.Radius)
}
func (s *Sphere) Volume() float64 {
radiusCubed := s.Radius * s.Radius * s.Radius
return (float64(4) / float64(3)) * math.Pi * radiusCubed
}
func main() {
s := Sphere{
Radius: 5,
}
fmt.Println(s.SurfaceArea())
fmt.Println(s.Volume())
}
运行结果:
相比于使用函数,使用方法集的优点在于,只需编写一次方法SurfaceArea和Volume。例如,如果发现这两个方法中有一个存在Bug,则只需修改一个地方即可。
酷客教程相关文章:
评论前必须登录!
注册