golang接口

1. 类和接口

go 复制代码
type ClassName struct {}
type InterfaceName interface {}
  1. 结构体类型是值类型,接口类型是引用类型。
  2. interface{}类型的变量可以存储任何类型的值。我们使用interface.(type) 来检查 interface存储的值的实际类型,并根据类型执行不同的操作。
go 复制代码
type MyType struct {
	Value int
}

var client interface{} = MyType{Value: 42}

switch v := client.(type) {  // v的值是MyType
case MyType:
	fmt.Println("client is MyType, value:", v.Value)
case *MyType:
	fmt.Println("client is *MyType, value:", v.Value)
default:
	fmt.Println("client is of a different type")
}

2. 实现接口

go语言不会显示地声明实现了哪个接口,只要类实现了接口的所有方法,就隐式地实现了这个接口。

go 复制代码
type Speaker interface {  Speak() string  }
type Person struct {   name string  }   
func (p Person) Speak() string {   return "Hello, my name is " + p.name  }  

3. 验证接口的实现

由于Go的接口是隐式实现的,所以无法明显知道某个结构体是否实现了接口的所以方法。

go 复制代码
// 静态检查 *GobCodec结构体是否实现了 Codec接口的所有方法
// 若没有实现,编译时就会报错
var _ Codec = (*GobCodec)(nil)   // 将nil转换为*GobCodec类型的指针并赋值给_
相关推荐
ttwuai6 天前
Go开源后台管理系统推荐:怎么按技术栈和边界比较4个官方仓库?
golang·gin
codeejun6 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
Achou.Wang6 天前
k8s中nginx worker process自动设置
后端·golang
指尖的爷7 天前
ARM 架构 Ubuntu(RK3588/aarch64)go开发环境安装手册
ubuntu·架构·golang
名字还没想好☜7 天前
Go 实现指数退避重试:context 取消、抖动 jitter 与什么时候别重试
后端·golang·go
Casbin开源社区7 天前
OpenAgent 详解:单二进制自托管 AI Agent 平台,30+ 模型接入、RAG 知识库、MCP 工具调用与 Casbin 工具权限
人工智能·golang·开源
五彩小白8 天前
GO语言装饰器语法
golang
金金计较.8 天前
Go语言-4
开发语言·golang
名字还没想好☜8 天前
Go context.AfterFunc 实战(Go 1.21):context 一取消就自动跑清理,告别手写 goroutine 监听 Done
后端·golang·go
web守墓人8 天前
【goed/ui】自定义组件设计思想篇
linux·windows·ui·golang