golang sorte de tranche croissant ou décroissant

J'ai besoin de trier une tranche d'un type qui est à venir à partir d'un 3rdparty paquet. Basée sur une condition de l'ordonnance doit être croissant ou décroissant.

La solution que j'ai est:

type fooAscending []foo

func (v fooAscending) Len() int           { return len(v) }
func (v fooAscending) Swap(i, j int)      { v[i], v[j] = v[j], v[i] }
func (v fooAscending) Less(i, j int) bool { return v[i].Amount < v[j].Amount }

type fooDescending []foo

func (v fooDescending) Len() int           { return len(v) }
func (v fooDescending) Swap(i, j int)      { v[i], v[j] = v[j], v[i] }
func (v fooDescending) Less(i, j int) bool { return v[i].Amount > v[j].Amount }

if someCondition {
    sort.Sort(fooAscending(array))
} else {
    sort.Sort(fooDescending(array))
}

Est-il une meilleure façon de le faire. 13 lignes de code pour cette tâche, et la plupart des il est dupliqué, semble un peu trop.

OriginalL'auteur gsf | 2016-06-08