go圣经 ——方法

这里只是记录了自己学过一遍但是在圣经(狼吞虎咽)中又看到的新鲜玩意

我们又称之为选择器

复制代码
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)

省略了上面的匿名函数

相关推荐
孔令飞1 小时前
知己知彼,百战不殆:AI SKILL 实现原理剖析
云原生·go·ai编程
孔令飞1 天前
工具分享:OneX AI 工具安装、配置及功能介绍
云原生·go·ai编程
喵了几个咪1 天前
GoWind Admin 拆解:一个 Sender 接口接 39 个通知渠道
微服务·golang·go·1024程序员节·admin·gowind
l1t1 天前
在windows中测试musql数据库
数据库·sqlite·go·1024程序员节
用户360055579001 天前
Kestrel_VLLM - 19 · KV 复用迁移到 GPU(上):per-state 镜像与同类静默分叉
go
我的div丢了肿么办2 天前
go语言对路由中的业务逻辑进行抽离
后端·go
孔令飞2 天前
1024程序员节,OneX平台送3套免费Go实战项目
云原生·go·ai编程
我不会起名字3222 天前
gRPC 拦截器写错:metadata 透传与超时注入的 3 个坑
微服务·go·grpc·拦截器
用户4015823324623 天前
对话一长,AI 就忘了你说过的话?Claude Code、Codex、Aider、WES Code 怎么压缩上下文
人工智能·go·ai编程
我的div丢了肿么办3 天前
go语言抽离路由文件以及对路由进行分组
后端·go