作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我刚刚阅读了 blog由罗伯派克撰写。我对此有一个小问题,可能我也可能是错的,但仍然希望获得反馈并正确理解 Go。
博客里有一段代码(其实是@jxck_写的)
_, err = fd.Write(p0[a:b])
if err != nil {
return err
}
_, err = fd.Write(p1[c:d])
if err != nil {
return err
}
_, err = fd.Write(p2[e:f])
if err != nil {
return err
}
// and so on
a) 根据我的理解,如果 fd.Write(p0[a:b])
发生错误,上面的代码将返回,并且永远不会执行 fd.Write(p1[ c:d])
,对吧?
Rob 建议写这样的东西
var err error
write := func(buf []byte) {
if err != nil {
return
}
_, err = w.Write(buf)
}
write(p0[a:b])
write(p1[c:d])
write(p2[e:f])
// and so on
if err != nil {
return err
}
b) 基于以上,看起来错误将从 sub 函数返回。所以这意味着如果错误发生在 write(p0[a:b])
那么它仍然会执行 write(p1[c:d])
,对吧?所以这意味着在逻辑上两者并不相同,对吧?
有人解释一下。
最佳答案
不,它们是一样的。如果 fd.Write(p0[a:b])
发生了错误
,err
变量将保持其值。
现在,如果您调用 write(p1[c:d])
,则 write()
函数将首先检查是否 err != nil
但由于它已经存储了上一次调用中发生的 error
,因此它将立即返回并且不会执行进一步的代码。
关于exception - 错误是值(value)观(博客)——在逻辑上是一样的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28412630/
我是一名优秀的程序员,十分优秀!