
Go 语言没有名为 Object 的内置泛型类型,但可通过空接口 interface{} 实现相同能力——它可保存任意具体类型的值,是 Go 中最通用的类型容器。
go 语言没有名为 `object` 的内置泛型类型,但可通过空接口 `interface{}` 实现相同能力——它可保存任意具体类型的值,是 go 中最通用的类型容器。
在 Go 中,不存在类似 Java 的 Object 或 C# 的 object 这类统一基类。取而代之的是空接口(empty interface):interface{}。它不声明任何方法,因此所有类型都天然实现了该接口——包括基本类型(int, string)、复合类型(struct, slice, map)乃至函数和通道。
例如,要定义一个能存储任意数据的结构体字段,应这样写:
type Foo struct {
data interface{}
}
✅ 正确用法示例:
f := Foo{
data: 42, // int
// data: "hello", // string
// data: []float64{1.1, 2.2}, // slice
// data: struct{ X, Y int }{1, 2}, // anonymous struct
}
fmt.Printf("%v (%T)\n", f.data, f.data) // 输出:42 (int)
⚠️ 注意事项:
-
interface{}提供了灵活性,但牺牲了类型安全与编译期检查;使用前通常需通过类型断言或switch类型判断还原为具体类型:if v, ok := f.data.(int); ok { fmt.Println("It's an int:", v*2) } - 自 Go 1.18 起,Go 支持真正的泛型(
type T any),但any是interface{}的别名(官方推荐用于泛型约束),并非新类型:type Container[T any] struct { // 等价于 [T interface{}] value T } - 若仅需“任意类型”语义,优先使用
any(更清晰);若涉及反射或底层操作,interface{}仍广泛适用。
总结:Go 不提供 Object 类型,但 interface{}(或其别名 any)是标准、安全且被语言深度支持的通用类型载体——它是 Go 类型系统中“万能容器”的唯一原生方案。










