Go basic programming practice (five) - and error logs

Custom Error type

Go can be used errors.New()to create an error message, you can to meet demand by creating a custom error type. errorIs an interface type, all types implement this interface can be used as a type of 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)
}

Logging

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

Catch the exception

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

Guess you like

Origin www.cnblogs.com/GaiHeiluKamei/p/11140665.html