一、为什么 Go 需要泛型?
在 Go 1.18 之前,实现通用数据结构只能靠:
interface{}+ 类型断言 → 失去类型安全,运行时 panic 风险;- 代码生成(如 go generate) → 冗余、难维护。
// Go 1.17 及以前:不安全的通用栈
type Stack []interface{}
Push(v {}) {
*s = (*s, v)
}
Pop() {} {
(*s) == {
()
}
v := (*s)[(*s)]
*s = (*s)[:(*s)]
v
}
stack := Stack{}
stack.Push()
v := stack.Pop().()

