自定義錯誤類型 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")
}