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

posted on 2019-07-06 01:21  GaiheiluKamei  阅读(427)  评论(0编辑  收藏  举报

导航