zoukankan      html  css  js  c++  java
  • 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 + "
    " + 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")
    }
    
  • 相关阅读:
    记:关于反演
    记:关于费马平方和定理的证明
    【2021集训队互测一】愚蠢的在线法官 题解
    CSP/NOIP2021 赛前集训
    20220108 省选组 总结
    Atcoder比赛总结
    Python读取execl数据写入到mysql
    大家都可以拖动的web小方块——Node.js摸石头系列之七
    创建一个Mybatis工程
    Spring整合Mybatis
  • 原文地址:https://www.cnblogs.com/GaiHeiluKamei/p/11140665.html
Copyright © 2011-2022 走看看