实现Less()时处理错误的正确方法

时间:2019-06-05 19:34:21

标签: go

我正在为特定类型编写排序函数。当编写接收器“ Less()”时,我调用了另一个可能返回错误的函数。由于Less()本身返回布尔值,处理这种情况的正确方法是什么?我不想惊慌,但我想指出排序的尝试失败了,因此调用sort.Sort()的函数可以决定如何处理该错误。但是,sort.Sort()似乎也不返回错误,因此我猜想还有另一种方法可以解决这个问题。

1428955046062147697
a
1428955046062147697
b

1 个答案:

答案 0 :(得分:3)

您不能;最接近的解决方案是改用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软件包用于在结构域等上进行典型的排序启发式,如字母,数字或字母/数字;不适用于可能会发生故障的更复杂的过程。