Go 一种处理不同数据类型的方法

Go 一种处理不同数据类型的方法,go,Go,我想创建一个接受不同数据类型的方法,但Go没有泛型。我必须编写以下重复代码: func getRandomSubrayInt64候选项[]int64,长度int[]int64{ 结果:=make[]int64,0,长度 如果lencandidates==0{ 返回结果 } 如果您可以定义一个接口,该接口导出方法以交换通用基础数组中的项。然后您需要使用特定于类型的数组/切片实现此接口。类似于 最好不要将切片称为数组。@Flimzy,是的,我知道,但我想与问题中的示例代码保持一致。无论如何,在上一次

我想创建一个接受不同数据类型的方法,但Go没有泛型。我必须编写以下重复代码:

func getRandomSubrayInt64候选项[]int64,长度int[]int64{ 结果:=make[]int64,0,长度 如果lencandidates==0{ 返回结果 }
如果您可以定义一个接口,该接口导出方法以交换通用基础数组中的项。然后您需要使用特定于类型的数组/切片实现此接口。类似于


最好不要将切片称为数组。@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)
}