Я бы сделал что-то вроде следующего:
func TwoOldestAges(ages []int) (oldest [2]int) {
sort.Sort(sort.Reverse(sort.IntSlice(ages)))
copy(oldest[:], ages)
return
}
Рабочий пример здесь
Я добавил имя к аргументу возврата, так что вы не делаете не нужно указывать, какой размер массива вы делаете в функции. Так как массив ограничен максимальным размером 2, копия просто поместит первые два результата в массив. Поэтому мы сортируем ваш возраст (который сортирует его по возрастанию), а затем переворачиваем его так, чтобы два максимальных результата были первыми двумя ключами.
Теперь, если вы хотите, вы можете обновить размер массива, чтобы он возвращался без необходимости обновите что-нибудь внутри метода.
Редактировать: Я, вероятно, также должен упомянуть, что это также защищает вас от паники из-за ограниченных индексов. Например, если вы прошли только срез с длиной / емкостью 1 , если бы вы полагались на ages[:-2]
, вы, скорее всего, попали бы за пределы пани c:
pani c: ошибка времени выполнения: границы среза вне диапазона [: 2] с емкостью 1