Z
ZHANK
方法与接口

接口

隐式实现、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)
}