Go基础编程实践(五)—— 错误和日志
程序员文章站
2022-03-26 12:11:57
自定义错误类型 Go中可以使用 创建错误信息,也可以通过创建自定义错误类型来满足需求。 是一个接口类型,所有实现该接口的类型都可以当作一个错误类型。 记录日志 捕获异常 ......
自定义错误类型
go中可以使用errors.new()
创建错误信息,也可以通过创建自定义错误类型来满足需求。error
是一个接口类型,所有实现该接口的类型都可以当作一个错误类型。
// error类型定义 type error interface { // error方法给出了错误描述 error() string }
package main import "fmt" // 创建一个表示错误的结构体类型,错误类型命名约定以error结尾 type myerror struct { shortmessage string detailedmessage string } // 实现error接口 // 引用传递以得到更好的内存管理 func (e *myerror) error() string { return e.shortmessage + "\n" + e.detailedmessage } func dosomething() error { return &myerror{shortmessage:"wohoo something happened!", detailedmessage:"file cannot found!"} } func main() { err := dosomething() // fmt.println在打印错误时会在内部调用error()方法,得到错误描述 fmt.println(err) }
记录日志
package main import ( "fmt" "log" "os" ) func main() { logfile, err := os.create("logfile") if err != nil { fmt.println("an error occured...") } defer logfile.close() // setoutput设置标准logger的输出位置 log.setoutput(logfile) log.println("doing some logging here...") // fatalln等价于调用println后调用os.exit(1). log.fatalln("fatal: application crashed!") }
捕获异常
package main import "fmt" func main() { sayhello() fmt.println("after the panic was recovered!") } func sayhello() { defer func() { if r := recover(); r != nil { fmt.println("recovered in f", r) } }() writesomething() } func writesomething() { panic("write operation error") }