类型约束与接口
1. 什么是类型约束
类型约束用于限制泛型函数或类型中类型参数所允许的类型。Go 使用接口类型作为约束。
泛型函数示例:
func Max[T constraints.Ordered](a, b T) T {
if a > b {
return a
}
return b
}
其中 constraints.Ordered 表示支持 < <= > >= 等运算的类型(如 int、float、string)。
2. 使用标准库约束
Go 官方提供 golang.org/x/exp/constraints(或 Go 1.20 起内置部分)用于常见约束:
import "golang.org/x/exp/constraints"
func Add[T constraints.Integer](a, b T) T {
return a + b
}
3. 自定义约束接口
你也可以自定义接口作为约束:
type Stringer interface {
String() string
}
func PrintString[T Stringer](s T) {
fmt.Println(s.String())
}
4. 使用 any 表示无限制类型
如果不需要约束类型参数,可以使用 any,等价于空接口 interface{}:
func Identity[T any](v T) T {
return v
}
5. 类型集合(Go 1.20+)
你也可以使用联合类型:
type Number interface {
~int | ~float64
}
~ 表示底层类型,常用于匹配自定义类型。
类型约束是泛型机制的核心,使得泛型既灵活又具备类型安全,是编写健壮可复用代码的重要工具。
相关内容
- 什么是 Go Go 是由 Google 开发的一种开源编程语言,以简洁、高效、并发编程支持强著称,广泛应用于后端开发、云原生和微服务等领域。
- Go 的特点与适用场景 Go 语言以高并发、快速编译、简洁语法和强大标准库著称,适用于构建高性能网络服务、微服务架构和云原生应用。
- 安装 Go(Windows/Linux/macOS) 本节介绍如何在 Windows、Linux 和 macOS 上安装 Go 语言开发环境,包含安装步骤、验证方法及常见注意事项。
- 设置环境变量 本节介绍如何为 Go 语言配置环境变量,包括 GOPATH、GOROOT、PATH 等关键变量,适用于 Windows、Linux 和 macOS 系统。
- 第一个 Go 程序(Hello World) 本节将带你编写第一个 Go 程序“Hello, World”,帮助你快速了解 Go 的基础语法和程序结构。
- Go Modules 简介 本节介绍 Go Modules 的基本概念与用法,它是 Go 官方推荐的依赖管理方式,支持版本控制、依赖隔离和构建一致性。