我们生成了以下代码(因此无法将其更改为type Enum interface { int32 }
):
type Enum int32
int32
有很多这样的类型定义。
我试图创建一个泛型函数,它可以将这样的类型定义的切片转换为[]int32
:
func ConvertToInt32Slice[T int32](ts []T) []int32 {
return lo.Map(ts, func(t T, _ int) int32 {
return int32(t)
})
}
但是下面的代码抱怨Type does not implement constraint 'interface{ int32 }' because type is not included in type set ('int32')
:
type Int32 int32
var int32s []Int32
i32s := ConvertToInt32Slice(int32s)
实现泛型函数需要什么,以便它可以按预期使用?
1条答案
按热度按时间vlju58qv1#
看起来您需要一个泛型函数,它可以对所有具有 * 底层类型 *
int32
的类型进行操作。这就是波浪号(~
)标记的作用。您应该将函数的签名更改为:另请参阅:What's the meaning of the new tilde token ~ in Go?
constraints.Integer
也适用,因为它定义为:https://pkg.go.dev/golang.org/x/exp/constraints#Integer
其定义为:
这样就得到了所有的类型,这些类型都是以整数类型作为基础类型的.
如果您只对以
int32
为基础类型的类型感兴趣,则应该使用~int32
。