golang 接口与接收器
在Go语言中,接口(interface)是一种类型,它定义了一组方法,但不包括这些方法的具体实现。任何类型,只要它实现了接口所有声明的方法,则它就实现了该接口。
接收器(receiver)是Go中的一个概念,它指的是在方法(method)的定义中,在关键字func和方法名之间的参数。这个参数定义了方法可以操作的基础变量的类型和名称。
下面是一个简单的例子,展示了如何在Go中定义接口和接收器:
package main
import "fmt"
// 定义一个接口
type Printer interface {
Print()
}
// 定义一个结构体和实现Printer接口的方法
type StringPrinter struct {
value string
}
// 这里的(s StringPrinter)就是接收器,s是方法可以操作的基础变量
// Print方法实现了Printer接口
func (s StringPrinter) Print() {
fmt.Println(s.value)
}
func main() {
// 创建一个StringPrinter实例
printer := StringPrinter{value: "Hello, World!"}
// 使用接收器调用方法
printer.Print() // 输出: Hello, World!
// 将printer当作Printer类型来使用
var p Printer = printer
p.Print() // 输出: Hello, World!
}
在这个例子中,我们定义了一个Printer接口和一个实现了该接口的StringPrinter结构体。StringPrinter的Print方法有一个接收器((s StringPrinter)),这个接收器定义了方法可以操作的变量是StringPrinter类型的实例。在main函数中,我们创建了StringPrinter的实例,并直接调用了它的Print方法,同时我们也展示了如何将printer变量作为Printer类型来使用。
Do not communicate by sharing memory; instead, share memory by communicating.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)