理解
go语言中的方法也是函数的一种,只不过在func和函数名之间增加了参数(类型接收器),接收器的类型可以是自定义的结构体或者非结构体类型,也可以是重定义的基本类型如int、string或指针类型,支持在方法内部访问该参数。
语法
func (param Type) methodName() {
//code...
}
下面我们用一个例子试一下,方法myBread接收一个bread结构体类型的参数m,然后输出一句话
package main
import "fmt"
type bread struct {
price int
taste string
}
func (m bread) myBread() {
fmt.Println("the", m.taste, "bread is", m.price, "yuan")
}
func main() {
bread1 := bread{
price: 5,
taste: "sweet",
}
bread1.myBread()
}
方法myBread接收一个bread结构体类型的参数m,然后在内部访问了接收器m的两个字段并打印出来,我们可以看到,方法使用 . 操作符来访问的
指针接收器
上面的是使用值接收器的方法,下面我们试一下指针接收器
package main
import "fmt"
type bread struct {
price int
taste string
}
func (m *bread) myBread() {
m.price = 8
}
func main() {
bread1 := bread{
price: 5,
taste: "sweet",
}
(&bread1).myBread()
fmt.Println(bread1)
}
myBread方法有一个指针接收器,接收(m *bread)指针类型,方法内部对m的调用是可见的,因为myBread方法接收指针类型参数,所以我们在调用的时候(&bread1).myBread(),对于调用者来说price是可见的,(&bread1).myBread()可以写成bread1.myBread(),go会自动识别并转换为(&bread1).myBread()的
以上代码输出 {8 sweet}
未完待续...