当前位置: 移动技术网 > IT编程>脚本编程>Go语言 > Go基础编程实践(五)—— 错误和日志

Go基础编程实践(五)—— 错误和日志

2019年07月06日  | 移动技术网IT编程  | 我要评论

自定义错误类型

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网