我是Go的新手(到目前为止花了30分钟!)并且我正在尝试进行文件I / O.
file, ok := os.Open("../../sample.txt")
if ok != nil {
// error handling code here
os.Exit(1)
}
...
当呼叫失败时,是否应该返回错误号码?此调用返回os.Error,它没有'String()'以外的方法。
这是推荐的方法来检查Go中的错误吗?
答案 0 :(得分:3)
典型的Go代码(使用os
包)不分析返回的错误对象。它只是将错误消息打印给用户(然后根据打印的消息知道出现了什么问题)或者将错误按原样返回给调用者。
如果你想阻止你的程序打开一个不存在的文件,或者想要检查文件是否可读/写,我建议在打开文件之前使用os.Stat函数。
您可以分析返回错误的Go类型,但这似乎不方便:
package main
import "fmt"
import "os"
func main() {
_, err := os.Open("non-existent")
if err != nil {
fmt.Printf("err has type %T\n", err)
if err2, ok := err.(*os.PathError); ok {
fmt.Printf("err2 has type %T\n", err2.Error)
if errno, ok := err2.Error.(os.Errno); ok {
fmt.Fprintf(os.Stderr, "errno=%d\n", int64(errno))
}
}
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(1)
}
}
打印:
err has type *os.PathError
err2 has type os.Errno
errno=2
open non-existent: no such file or directory
答案 1 :(得分:1)
是的,这是Go中的常规方式(多值返回),Go的制作者对异常有不同的看法并以这种方式处理它。
阅读本文: