我有以下几点:
type Int32A int32
type Int32B int32
并希望实现一个函数,可以接受类型为reflect.Int32
的任何类型的切片,并将其转换为[]int32
.例如:
func ConvertTypeSliceToInt32Slice(es «es-type») []int32 {
result := make([]int32, len(es))
for i := 0; i < len(result); i++ {
result[i] = es[i].(int32)
}
return result
}
func caller() {
Int32as := Int32A{1, 2}
Int32bs := Int32B{3, 5}
int32as := ConvertTypeSliceToInt32Slice(Int32as)
int32bs := ConvertTypeSliceToInt32Slice(Int32bs)
}
对于任何类型为reflect.Int32
的任意类型定义,如何做到这一点?(上下文:此函数将用于转换proto
enum
的切片;即完整的类型集未知且无边界,因此对每种类型执行switch
是不可行的).
此外,我使用1.17
,所以我不能使用参数化类型(又名模板).
一次失败的try (它在is.([]interface{})
时panic ):
func ConvertTypeSliceToInt32Slice(is interface{}) []int32 {
es := is.([]interface{})
result := make([]int32, len(es))
for i := 0; i < len(result); i++ {
result[i] = es[i].(int32)
}
return result
}