使用错误返回代码进行参数验证是否被认为是良 我的意思是有人应该在哪里使用错误与恐慌(有没有指导方针?).
例如:
我想,使用通常会让Go感觉非常C-ish并且看起来非常糟糕的错误.在这些情况下,恐慌是不是一个好的选择?
或者Gopher应该使用Python/Ruby/JS方法"只是让它失败"?
我有点困惑,因为在我的理解中恐慌是真正的"错误".但是一直使用错误都很糟糕.
即使我会返回错误代码:如果有人将错误的参数传递给我的函数但忽略了错误代码,我该怎么办? - >什么都没有!老实说,我会说恐慌对于那些情况很好,但是在一种语言中,错误代码用于恐慌,这不是很清楚.
kos*_*tix 15
"逃离" panic小号1在Go(我的意思是,那些可能被包括你的包的公共API函数来生产)的处理错误程序员做.因此,如果你的函数获得一个指向一个对象的指针,并且不能nil(例如,表明该值丢失),那么继续并取消引用指针,使其成为运行时panic本身nil.如果函数需要一个必须在某个范围内的整数,panic如果它不在该范围内 - 因为在正确的程序中,可能传递给你的函数的所有值都在那个范围内,如果它们没有那么那么程序员没有遵守API或他们没有消除从外部获得的价值,这也不是你的错.
另一方面,无法打开文件或pefrorm等函数在正确调用时应该执行的其他操作不应该导致panics并且函数应该返回相应的错误.
请注意,null在.NET和Java代码中公开API函数中显式检查参数的建议有不同的目标,即使这类错误更具可读性.但是,由于99%的.NET和Java代码只是让所有异常传播到顶层(然后显示或可能被记录),它只是将一个(由运行时生成)异常替换为另一个异常.它可能会使错误更加明显 - 在API函数中执行失败,而不是在调用堆栈的更深处 - 但会给这些API函数增加不必要的瑕疵.所以,是的,这是固执己见的,但我的主观意见是:让它只是崩溃就行了 - 你会得到一个描述性的堆栈跟踪.
TL; DR
关于运行时问题的处理,
panics用于编程错误;1panic s的另一个合法用途是从深度递归处理/计算返回的快速"冷路径"; 在这种情况下,panic应该由您的包捕获并处理,相应的公共API函数应该返回错误.见这和此获取更多信息.
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |