我正在为特定类型编写排序函数。当编写接收器“ Less()”时,我调用了另一个可能返回错误的函数。由于Less()本身返回布尔值,处理这种情况的正确方法是什么?我不想惊慌,但我想指出排序的尝试失败了,因此调用sort.Sort()的函数可以决定如何处理该错误。但是,sort.Sort()似乎也不返回错误,因此我猜想还有另一种方法可以解决这个问题。
1428955046062147697
a
1428955046062147697
b
答案 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
软件包用于在结构域等上进行典型的排序启发式,如字母,数字或字母/数字;不适用于可能会发生故障的更复杂的过程。