这里只是记录了自己学过一遍但是在圣经(狼吞虎咽)中又看到的新鲜玩意
我们又称之为选择器
package main
import "fmt"
type Rect struct {
width, height float64
}
// 定义一个方法来计算矩形的面积
func (r Rect) Area() float64 {
return r.width * r.height
}
func main() {
rect := Rect{width: 3, height: 4}
area := rect.Area() // 这里选择了 Rect 类型的实例 rect,并调用其 Area 方法来计算面积
fmt.Println("Area:", area)
}
方法是与结构体相关联的函数,它允许我们从Rect类型的实例中选择并计算其面积
选择器中有多个同名的方法会报错
type ColoredPoint struct {
Point
color.RGBA
}
比如都有max方法在Point和RGBA中,就会报错
我们来看下面两组代码:
var (
mu sync.Mutex // guards mapping
mapping = make(map[string]string)
)
func Lookup(key string) string {
mu.Lock()
v := mapping[key]
mu.Unlock()
return v
}
var cache = struct {
sync.Mutex
mapping map[string]string
}{
mapping: make(map[string]string),
}
func Lookup(key string) string {
cache.Lock()
v := cache.mapping[key]
cache.Unlock()
return v
}
在第二组代码中我们将这两个变量联合起来变成了一个有mutex方法的 结构体变量,这是一个匿名的struct,同时我们又能使用mapping这个变量,使得结构更加统一
方法值和方法表达式
我们的选择器可以不需要接收器就可以被调用
就是说:
type Rocket struct { /* ... */ }
func (r *Rocket) Launch() { /* ... */ }
r := new(Rocket)
time.AfterFunc(10 * time.Second, func() { r.Launch() })
time.AfterFunc(10 * time.Second, r.Launch)
省略了上面的匿名函数