设为首页 加入收藏

TOP

Go基础编程实践(五)—— 错误和日志
2019-07-05 22:10:35 】 浏览:24
Tags:基础 编程 实践 错误 日志

自定义错误类型

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 writeSomet
		    

hing() { panic("Write operation error") }

编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Go基础编程实践(四)—— 数组和.. 下一篇GO代码生成代码小思小试

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }