Go 一种处理不同数据类型的方法
我想创建一个接受不同数据类型的方法,但Go没有泛型。我必须编写以下重复代码: func getRandomSubrayInt64候选项[]int64,长度int[]int64{ 结果:=make[]int64,0,长度 如果lencandidates==0{ 返回结果 }Go 一种处理不同数据类型的方法,go,Go,我想创建一个接受不同数据类型的方法,但Go没有泛型。我必须编写以下重复代码: func getRandomSubrayInt64候选项[]int64,长度int[]int64{ 结果:=make[]int64,0,长度 如果lencandidates==0{ 返回结果 } 如果您可以定义一个接口,该接口导出方法以交换通用基础数组中的项。然后您需要使用特定于类型的数组/切片实现此接口。类似于 最好不要将切片称为数组。@Flimzy,是的,我知道,但我想与问题中的示例代码保持一致。无论如何,在上一次
如果您可以定义一个接口,该接口导出方法以交换通用基础数组中的项。然后您需要使用特定于类型的数组/切片实现此接口。类似于
最好不要将切片称为数组。@Flimzy,是的,我知道,但我想与问题中的示例代码保持一致。无论如何,在上一次编辑中已修复。更正OP的不当术语比传播它更好:在什么意义上更好?您所拥有的是可读的,并且应该表现良好。这些可能是OP最重要的方面代码。我想不出更好的了。@Flimzy但是代码几乎是重复的。有没有办法减少重复的代码?在不影响可读性和性能的情况下。重复的代码并不总是坏事。
type ShuffleSlice interface {
Swap(i, j int)
Len() int
}
func GetRandomSubslice(candidates ShuffleSlice) ShuffleSlice {
if candidates == nil || candidates.Len() == 0 {
return nil
}
rand.Shuffle(candidates.Len(), func(i, j int) {
candidates.Swap(i, j)
})
return candidates
}
type ShuffleSliceInt []int
func (s ShuffleSliceInt) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
func (s ShuffleSliceInt) Len() int {
return len(s)
}