本文将详细的描述在Go语言中如何定义方法,以及如何使用它;阅读本文可能需要一点Go语言基础以及结构体的知识;

在Go语言中,没有类这个概念,不过我们可以为结构体类型定义方法;

先看一段代码:

package main

import "fmt"

type Rectangle struct {
	X float64
	Y float64
}

func Area(r Rectangle)float64{
	return r.X * r.Y
}

func main(){
	A := Rectangle{12,5}
	fmt.Println(Area(A))
}

这段代码定义了一个 Rectangle 结构体类型,该结构体包含两个字段 X 和 Y,用于表示矩形的长和宽;另外定义了一个 Area() 函数,该函数接收一个Rectangle 结构体类型,返回该Rectangle的面积;

那么,我们现在来修改这段代码,将Area() 函数修改为Rectangle结构体的方法:

package main

import "fmt"

type Rectangle struct {
	X float64
	Y float64
}

func (r Rectangle) Area()float64{
	return r.X * r.Y
}

func main(){
	A := Rectangle{5,12}
	fmt.Println(A.Area())
}

此时的Area()彻彻底底的变成了Rectangle结构体的方法;在func 关键字和Area之间加入了一个特殊的参数,这里的 r 就有点相当于C++中的 this ,python中的 self;

在代码的16行中,展示了结构体方法的使用;

Area() 方法中的 r 是其结构体的一个副本;如果你需要在定义的方法中修改结构体中的数据,那么你需要将其定义为指针,否则你修改的值不会生效,因为那是一个副本;

func (r *Rectangle) SetXY(x,y float64){
	r.X = x
	r.Y = y
}