Go基礎編程實踐(五)—— 錯誤和日誌

自定義錯誤類型

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")
}
相關文章
相關標籤/搜索