为结构体定义方法
本课属于 Coddy GO 学习旅程的“面向对象编程”单元。第 7 课,共 107 课。
Go 中的方法是带有特殊接收者参数的函数,这个参数会将函数与结构体类型关联起来。
方法语法
func (receiverName StructType) MethodName() ReturnType {
// 方法体
}定义一个带方法的结构体
type Rectangle struct {
Width float64
Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func (r Rectangle) Perimeter() float64 {
return 2 * (r.Width + r.Height)
}带参数的方法
func (r Rectangle) Scale(factor float64) float64 {
return r.Area() * factor
}调用方法
rect := Rectangle{Width: 5, Height: 3}
fmt.Println(rect.Area()) // 输出:15
fmt.Println(rect.Perimeter()) // 输出:16
fmt.Println(rect.Scale(2)) // 输出:30接收器 (r Rectangle) 让你可以在方法中通过接收器变量 r 访问结构体的字段。方法可以调用同一个结构体上的其他方法。
挑战
中等为 Circle 结构体添加三个方法:
Area:返回math.Pi * radius * radiusCircumference:返回2 * math.Pi * radiusDescribe:返回一个字符串:"Circle with radius X.XX"
亲手试试
package main
import "fmt"
func main() {
var radius float64
fmt.Scan(&radius)
c := Circle{Radius: radius}
fmt.Printf("Area: %.2f\n", c.Area())
fmt.Printf("Circumference: %.2f\n", c.Circumference())
fmt.Printf("Description: %s\n", c.Describe())
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Go 在线编译器