登录
首页 >  Golang >  Go问答

处理 Less() 函数中的错误的正确方法

来源:stackoverflow

时间:2024-03-02 14:45:17 111浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《处理 Less() 函数中的错误的正确方法》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我正在为特定类型编写排序函数。当编写接收器“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?
}

解决方案


你不能;最接近的解决方案是使用 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 包用于典型的启发式排序,例如结构体字段上的字母、数字或字母/数字等;不适用于可能失败的更复杂的过程。

今天关于《处理 Less() 函数中的错误的正确方法》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>