接口
隐式实现、interface{} / any、类型断言 .(T)、类型选择 switch
接口
Go 接口是隐式实现的——不需要 implements 关键字。只要类型有接口要求的方法,它就自动实现了该接口。
学完本章你将: 掌握接口定义、隐式实现、interface{}/any、类型断言。
接口基础
go
package main
import "fmt"
// 定义接口
type Speaker interface {
Speak() string
}
// Dog 实现了 Speaker(不需要声明)
type Dog struct{ Name string }
func (d Dog) Speak() string { return d.Name + " 汪汪!" }
// Cat 也实现了 Speaker
type Cat struct{ Name string }
func (c Cat) Speak() string { return c.Name + " 喵喵!" }
func main() {
// 接口变量可以持有任何实现了该接口的类型
var s Speaker
s = Dog{"旺财"}
fmt.Println(s.Speak()) // 旺财 汪汪!
s = Cat{"咪咪"}
fmt.Println(s.Speak()) // 咪咪 喵喵!
}
空接口 interface{} / any
go
// interface{} 可以接受任何类型(Go 1.18+ 推荐用 any)
var x any
x = 42
x = "hello"
x = []int{1, 2, 3}
// 常见于 fmt.Println 的参数
func Println(a ...any) (n int, err error) { }
类型断言与类型选择
go
// 类型断言
var i interface{} = "hello"
s, ok := i.(string) // "hello", true
n, ok := i.(int) // 0, false
// 类型选择(type switch)
switch v := i.(type) {
case int:
fmt.Println("整数:", v)
case string:
fmt.Println("字符串:", v)
default:
fmt.Printf("其他类型:%T\n", v)
}