Go中能够使用errors.New()
建立错误信息,也能够经过建立自定义错误类型来知足需求。error
是一个接口类型,全部实现该接口的类型均可以看成一个错误类型。app
// 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") }