Você pode ordenar slices de structs com facilidade no Go 1.21+ usando os pacotes genéricos slices e cmp.
Como o cmp.Compare funciona
cmp.Compare(a, b) retorna:
- `-1` if `a < b`
- `0` if `a == b`
- `1` if `a > b`
É perfeito para escrever comparadores personalizados concisos em funções de ordenação.
Exemplo: Ordenando structs
import (
"cmp"
"slices"
)
type Book struct {
Title string
Year int
}
books := []Book{
{"The Go Programming Language", 2015},
{"Learning Go", 2021},
{"Introducing Go", 2016},
}
// Sort books by Year (ascending)
slices.SortFunc(books, func(a, b Book) int {
return cmp.Compare(a.Year, b.Year)
})
// Sort books by Title (ascending)
slices.SortFunc(books, func(a, b Book) int {
return cmp.Compare(a.Title, b.Title)
})
Não precisa implementar sort.Interface nem gerenciar a lógica de índices manualmente — é só usar generics!
