在Go中调用os.Open(<filename>)时如何检查错误?

我是Go语言的新手(到目前为止已花费30分钟!),并且正在尝试执行文件I / O。


  file, ok := os.Open("../../sample.txt")

  if ok != nil {

    // error handling code here

    os.Exit(1)

  }

  ... 

当呼叫失败时,它不应该返回错误号吗?该调用返回os.Error,除了'String()'之外没有其他方法。


这是检查Go中错误的推荐方法吗?


鸿蒙传说
浏览 326回答 2
2回答

慕侠2389804

典型的Go代码(使用该os程序包)没有分析返回的错误对象。它只是将错误消息打印给用户(然后,用户根据打印的消息知道出了什么问题),或者将错误原样返回给调用者。如果要阻止程序打开不存在的文件,或者要检查文件是否可读/可写,我建议在打开文件之前使用os.Stat函数。您可以分析返回错误的Go类型,但这似乎很不方便:package mainimport "fmt"import "os"func main() {&nbsp; &nbsp; _, err := os.Open("non-existent")&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("err has type %T\n", err)&nbsp; &nbsp; &nbsp; &nbsp; if err2, ok := err.(*os.PathError); ok {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("err2 has type %T\n", err2.Error)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if errno, ok := err2.Error.(os.Errno); ok {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fmt.Fprintf(os.Stderr, "errno=%d\n", int64(errno))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; fmt.Fprintf(os.Stderr, "%s\n", err)&nbsp; &nbsp; &nbsp; &nbsp; os.Exit(1)&nbsp; &nbsp; }}打印:err has type *os.PathErrorerr2 has type os.Errnoerrno=2open non-existent: no such file or directory
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go