Правильный способ обработки ошибки при реализации Less () - PullRequest
1 голос
/ 05 июня 2019

Я пишу функцию сортировки для определенного типа.При написании получателя «Less ()» я вызываю другую функцию, которая может вернуть ошибку.Так как Less () сам по себе возвращает bool, как правильно обрабатывать этот сценарий?Я не хочу паниковать, но я хотел бы указать, что попытка сортировки не удалась, так что функция, вызывающая sort.Sort (), может решить, что делать с ошибкой.Однако sort.Sort (), похоже, тоже не возвращает ошибку, поэтому я предполагаю, что есть другой способ сделать это.

func (t MyType) Less(i, j int) bool {
     retval, err := myOtherFunc(t[i])
     // How do I handle err?
}

1 Ответ

3 голосов
/ 05 июня 2019

Вы не можете; самым близким решением было бы использовать вместо этого sort.Slice с закрытием, которое вы можете использовать для отлова ошибок во внешней области:

errs := make([]error)
sort.Slice(mySlice, func(i, j int) bool {
     retval, err := myOtherFunc(mySlice[i])
     if err != nil {
        errs = append(errs, err)
     }
     return retval
})
if len(errs) > 0 {
    // do something about errors
}

Это не остановит сортировку при первой ошибке (вы не можете), но, по крайней мере, позволит вам собрать их. Пакет sort предназначен для типичных эвристических методов сортировки, таких как алфавитный, числовой или буквенно-числовой для структурного поля и т. П .; не для более сложных процессов с возможностью сбоя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...