Go 示例: 方法

Go 支持在结构体类型上定义方法

package main
import "fmt"
type rect struct {
    width, height int
}

这个 area 方法有一个接收器类型*rect

func (r *rect) area() int {
    return r.width * r.height
}

方法可以为指针或值接收器类型定义。以下是一个值接收器的示例。

func (r rect) perim() int {
    return 2*r.width + 2*r.height
}
func main() {
    r := rect{width: 10, height: 5}

这里我们调用了为我们的结构体定义的 2 个方法。

    fmt.Println("area: ", r.area())
    fmt.Println("perim:", r.perim())

Go 会自动处理方法调用时值和指针之间的转换。你可能希望使用指针接收器类型来避免方法调用时的复制,或者允许方法修改接收结构体。

    rp := &r
    fmt.Println("area: ", rp.area())
    fmt.Println("perim:", rp.perim())
}
$ go run methods.go 
area:  50
perim: 30
area:  50
perim: 30

接下来我们将看一下 Go 用于对相关方法集进行分组和命名的机制:接口。

下一个示例:接口.