新提案
新的提案内容是希望增加一个新的变种语句,允许在 switch 语句中使用泛型时,能够进一步便捷的约束其类型参数。
例如:
switch type T {
case A1:
case A2, A3:
...
}
复制代码
也就是 switch-type 语句的 T 类型可以是一个泛型的类型参,case 所对应的的类型可以是任何类型,包括泛型的约束类型。
假设类型 T 的类型有可能是以下:
interface{
C
A
}
复制代码
可以借助泛型的近似元素来约束:
interface{
C
A1 | A2 | ... | An
}
复制代码
甚至还可以在 case 上有新的写法:
case interface {~T}:
复制代码
在支持泛型后,switch 在 type 和 case 上会存在很多种可能性,需要进行具体的特性支持,这个提案就是为此出现。
实际案例
案例一:多类型元素
type Stringish interface {
string | fmt.Stringer
}
func Concat[S Stringish](x []S "S Stringish") string {
switch type S {
case string:
...
case fmt.Stringer:
...
}
}
复制代码
类型 S 能够支持 string 和