章节

9.3 空接口

本篇学习空接口和 any 的含义,并能在需要接收任意类型时安全处理接口值。

空接口

概念说明

空接口写作 interface{},它没有声明任何方法。
因为所有类型都至少实现了“零个方法”,所以任意类型都满足空接口。

Go 1.18 之后可以使用 any 表示 interface{}
any 更短,也更能表达“任意类型”的含义。

语法/规则

  1. interface{} 可以接收任意类型的值。
  2. anyinterface{} 的类型别名。
  3. 从空接口中取具体值时,通常需要类型断言或 type switch
  4. 空接口会削弱类型约束,能不用就不要滥用。
  5. 常见场景是日志、序列化、通用容器、泛型出现前的通用函数。

空接口接收任意值示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main

import "fmt"

func printAny(value any) {
	switch v := value.(type) { // 根据实际类型进入不同分支
	case string:
		fmt.Println("string:", v)
	case int:
		fmt.Println("int:", v)
	case bool:
		fmt.Println("bool:", v)
	default:
		fmt.Println("other")
	}
}

func main() {
	printAny("go")
	printAny(21)
	printAny(true)
}

输出结果:

1
2
3
string: go
int: 21
bool: true

常见错误

  1. any 当成“不需要类型”的意思,实际运行时仍然要面对具体类型。
  2. 大量使用空接口让函数签名失去约束,调用方不容易知道应该传什么。
  3. 忘记断言失败的情况,导致处理空接口时发生 panic。
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字