Cómo evitar volver a implementar el ordenamiento. Interfaz para estructuras de golang similares

Hay un problema que me molesta en Golang. Digamos que tengo 2 estructuras:

type Dog struct {
   Name string
   Breed string
   Age int
}

type Cat struct {
    Name string
    FavoriteFood string
    Age int
}

Y cuando trato de ordenar[]*Dog y[]*Cat porAge, Tengo que definir 2 estructuras de clasificación diferentes como:

type SortCat []*Cat
func (c SortCat) Len() int {//..}
func (c SortCat) Swap(i, j int) {//..}
func (c SortCat) Less(i, j int) bool {//..}

type SortDog []*Dog
func (c SortDog) Len() int {//..}
func (c SortDog) Swap(i, j int) {//..}
func (c SortDog) Less(i, j int) bool {//..}

Un pensamiento natural es implementar algunosSortableByAge interfaz y crear unLess función utilizando la función de interfaz. Me gusta:

type SortableByAge interface {
    AgeValue() int
}

Y entonces:

type SortAnimal []SortableByAge
func (c SortDog) Less(i, j int) bool {
    return c[i].AgeValue() < c[j].AgeValue() 
}

Sin embargo, de acuerdo con:http://golang.org/doc/faq#convert_slice_of_interface

dogs := make([]*Dogs, 0 , 1)
//add dogs here
sort.Sort(SortAnimal(dogs))

Arriba no es posible.

Así que me pregunto cuál es la mejor práctica para este caso y

¿Existe alguna otra técnica que pueda reducir la necesidad de implementar elsort.Interface&nbsp;para estructuras similares una y otra vez que me he perdido?

EDITAR: me di cuenta de que mis ejemplos son terribles :(

En el caso de la vida real, estas 2 estructuras son muy diferentes, lo único en común entre ellas es que deseo ordenarlas por un valor numérico común.

Un mejor ejemplo sería:

type Laptop {//...}
type Pizza {//...}

Y lo único que estas 2 estructuras comparten en común es que deseo ordenar una porción (agh ... no debería haber usadoPizza&nbsp;en ejemplo) de ellos por precio.

Por lo tanto, combinarlos con una estructura común no funciona realmente en muchos casos. Pero se verá en ir a generar.