Avatar ·

Qual é a maneira mais simples de ordenar um array de structs por um campo arbitrário em Go?

Olá a todos! Comecei a estudar Go recentemente e me deparei com um problema de ordenação. Tenho um array de structs User:

type User struct {
    Name string
    Age  int
    Score float64
}

users := []User{
    {"Anna", 25, 88.5},
    {"Boris", 30, 92.1},
    {"Victor", 22, 85.0},
}

Preciso ordenar este array por diferentes campos dependendo da escolha do usuário: às vezes pelo nome (alfabeticamente), às vezes pela idade, às vezes pela pontuação. Eu sei que em Go existe o pacote sort, mas para cada campo tenho que escrever uma função separada com Less(i, j int) bool. Isso é muito inconveniente, especialmente se houver muitos campos.

Por exemplo, ordenação por idade:

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

E se precisar ordenar pelo nome? Tenho que escrever uma nova função anônima. E se houver 10 campos? Ou ordenar primeiro pela idade e depois pelo nome?

Em Python...