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") }