d****n 发帖数: 1637 | 1 献给gopher们,俺还没踩到,不过惊出一身冷汗。希望对其他gopher有用
http://studygolang.com/articles/5188
坑(s)
每种编程语言都有自己的专属坑(s),Go虽出身名门,但毕竟年轻,坑也不少,在error
处理这块也可以列出几个。
1、 Go FAQ:Why is my nil error value not equal to nil?
type MyError string
func (e *MyError) Error() string {
return string(*e)
}
var ErrBad = MyError("ErrBad")
func bad() bool {
return false
}
func returnsError() error {
var p *MyError = nil
if bad() {
p = &ErrBad
}
return p // Will always return a non-nil error.
}
func main() {... 阅读全帖 |
|
m*********a 发帖数: 3299 | 2 估计MyError 是run time exception.是unchecked.
你过你添加的call中加了interrupted exception,可以re-throw
youcall()
{
try{}
catch (InterruptedExcetpion e){
MyError myerror = new MyError();
myerror.setSource(e);
throw myerror;
}
}
} |
|
b***i 发帖数: 3043 | 3 还是那个项目,现在我看里面的结构,有一个函数
play(...){
try {
... call(); //这是定义在一个抽象类的函数,众多子类实现该定义
} catch(MyError my){
...
}
}
然后,在某些子类的call里面,我没有看到throws声明。
我把自己定义的一个call里面加入了Thread.sleep,目的就是如果interrupt了,就把线
程退出。发现eclipse说需要throws InterruptedException, 或者要自己catch。那么
为什么在众多的子类的call函数里面,MyError没有catch,也没有throws声明,只需要
在最外围的play那里catch?
我按照eclipse的提示,一步一步增加throws,结果已经增加了十几个了,不敢继续改
,因为改太多了。为什么原来的MyError不用这么做呢?我是不是需要被
InterruptedException截获,然后放在MyError里面,在play里面一起处理?我这样处
理,线程如果被中断,是可以退出的。我的目的就是如... 阅读全帖 |
|
t****t 发帖数: 6806 | 4 oh, you don't even have to open a new handle. you probably can use
{
open (local *STDERR, "> myerror") or die;
Net::Ftp ...
}
note the parenthesis for open. |
|
b***i 发帖数: 3043 | 5 好像是checked exception和unchecked的区别。
网上有人问,这个InterruptedException为啥要check。那我就截获然后throw MyError
,里面增加一个boolean表示是线程中断就行了。 |
|
b***s 发帖数: 117 | 6 RuntimeException以下的,都是unchecked的
MyError |
|