需求
数据查询采用了并发的方式,然后用chan收集数据,得到的数组是一个乱序的数组,想根据数组元素的某个字段进行排序。一般是用sort包进行排序,但是不同数组的元素类型不同,不想为每一个元素进行实现sort中的接口,故在外层加了一成封装。
实现
假设结构体比较的字段是int型,基本满足了绝大多数场景的排序。其他比较类似。通过反射实现大小的比较。Swap方法的实现本来也想用reflect自己实现,始终报错。最后发现reflect提供了相应的方法,真是日了狗了。
代码
package main
import (
"fmt"
"reflect"
"sort"
)
type Items struct {
data interface{
}
field string
}
func (items *Items) Len() int {
if reflect.ValueOf(items.data).Kind() != reflect.Slice {
return -1
}
return reflect.