Menu
CoddyTech

为结构体定义方法

本课属于 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 访问结构体的字段。方法可以调用同一个结构体上的其他方法。

challenge icon

挑战

中等

为 Circle 结构体添加三个方法:

  • Area:返回 math.Pi * radius * radius
  • Circumference:返回 2 * math.Pi * radius
  • Describe:返回一个字符串:"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())
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: Go 在线编译器