Avatar ·

如何在Go中最简单地按任意字段对结构体数组进行排序?

大家好!我刚开始学习Go,遇到了排序问题。我有一个User结构体数组:

type User struct {
    Name string
    Age  int
    Score float64
}

users := []User{
    {"安娜", 25, 88.5},
    {"鲍里斯", 30, 92.1},
    {"维克多", 22, 85.0},
}

我需要根据用户的选择按不同字段对这个数组进行排序:有时按姓名(字母顺序),有时按年龄,有时按分数。我知道Go中有sort包,但每个字段都需要编写一个单独的带有Less(i, j int) bool的函数。这非常不方便,特别是当字段很多的时候。

例如,按年龄排序:

sort.Slice(users, func(i, j int) bool {
    return users[i].Age < users[j].Age
})

如果需要按姓名排序呢?必须编写一个新的匿名函数。如果有10个字段呢?或者需要先按年龄排序,再按姓名排序?

在Python中