Как избежать повторной реализации sort.Interface для подобных структур golang

На Голанге меня беспокоит одна проблема. Скажем, у меня есть 2 структуры:

type Dog struct {
   Name string
   Breed string
   Age int
}

type Cat struct {
    Name string
    FavoriteFood string
    Age int
}

И когда я пытаюсь сортировать[]*Dog а также[]*Cat отAge, Я должен определить 2 различных вида сортировки, как:

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 {//..}

Естественная мысль заключается в реализации некоторыхSortableByAge интерфейс и создатьLess функция с использованием функции интерфейса. Подобно:

type SortableByAge interface {
    AgeValue() int
}

А потом:

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

Однако согласно:http://golang.org/doc/faq#convert_slice_of_interface

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

Выше не возможно.

Так что мне интересно, какова лучшая практика для этого случая и

Есть ли какой-либо другой метод, который может уменьшить потребность в реализацииsort.Interface за подобные структуры снова и снова, что я пропустил?

РЕДАКТИРОВАТЬ: я понял, что мои примеры ужасны :(

В реальной жизни эти две структуры очень разные, единственное, что их объединяет, - это то, что я хочу отсортировать их по общему числовому значению.

Лучшим примером будет:

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

И единственное, что объединяет эти две структуры, это то, что я хочу отсортировать ломтик (ах ... не следовало использоватьPizza в примере) из них по цене.

Таким образом, объединение их в общую структуру на самом деле не работает во многих случаях. Но посмотрим на иди генерации.

Ответы на вопрос(3)

Ваш ответ на вопрос