假如有多种结构体在一个空接口数组里面。(可能的场景:从数据库取出3种点赞,评论,关注等通知,排序获取时间最近的x个,或者从数据库中选出小孩,年青人,老人对年龄排序)
个人总结有2种方法:
- 自定义接口,即为所有结构体实现方法返回该值,以下代码中的A, B, C皆实现了getAge方法。
package main
import (
"fmt"
"sort"
)
type A struct {
Age int
}
type B struct {
Age int
}
type C struct {
Age int
}
type People interface {
GetAge() int
}
func (a A) GetAge() int {
return a.Age
}
func (b B) GetAge() int {
return b.Age
}
func (c C) GetAge() int {
return c.Age
}
func main() {
a := A{50}
b := B{10}
c := C{100}
arr := []People{a, b, c}
fmt.Println(arr)
sort.Slice(arr, func(pre, next int) bool {
return arr[pre].GetAge() < arr[next].GetAge()
})
fmt.Println(arr)
}
- 上面的代码虽然比较的清晰,但在不同的结构体种类过多的时候,一个个都要加函数可能相对而言比较麻烦,这里也有一种使用反射实