美文网首页
golang 1.13 errors 包 新函数介绍

golang 1.13 errors 包 新函数介绍

作者: guonaihong | 来源:发表于2019-10-15 09:25 被阅读0次

这次 errors 包算重量级更新。很有更能把以前的一些设计模式给推到。下面聊下用法。

error 装包

以前返回一个错误,想要保存 error 链,还要定义结构体保存以前的 error 信息。感兴趣看下 syscal.ECONNREFUSED 如何封装到 url.Error 的。现在只要%w 就行

err = fmt.Errorf("第二层错误信息 %w", err)

error 解包

如果是 fmt.Errorf("%w", err) 定义的错误链可以通过,或者实现了Unwrap接口的错误

e = errors.Unwrap(e) //解包错误

装包解包需要注意的地方

装包和解包错误是一一对应的,一次 Unwrap 调用,解一次 fmt.Errorf("%w", err)调用

package main

import (
    "errors"
    "fmt"
)

func main() {

    var e, first error

    first = errors.New("head")

    e = fmt.Errorf("第一层错误:%w", first)
    e = fmt.Errorf("第二层错误:%w", e)
    e = fmt.Errorf("第三层错误:%w", e)
    e = fmt.Errorf("第四层错误:%w", e)

    //解包错误
    e = errors.Unwrap(e)
    fmt.Printf("%s\n", e)

    //解包错误
    e = errors.Unwrap(e)
    fmt.Printf("%s\n", e)

    //解包错误
    e = errors.Unwrap(e)
    fmt.Printf("%s\n", e)

    //解包错误
    e = errors.Unwrap(e)
    fmt.Printf("%s\n", e)
}

/*
第三层错误:第二层错误:第一层错误:head
第二层错误:第一层错误:head
第一层错误:head
head

*/

判断错误是否相等

过去写法 ==

if err == os.ErrNotExistF {

}

现在写法 errors.Is

以前只有一个错误,现在是错误链表,要通过 errors.Is 遍历判断

b := errors.Is(err, os.ErrNotExist)
fmt.Printf("%t\n", b)

新写法根据具体类型判断 errors.As

errors.As和errors.Is的区别,主要是取出这种类型的错误

 if _, err := os.Open("non-existing"); err != nil {
        var pathError *os.PathError
        if errors.As(err, &pathError) {
            fmt.Println("Failed at path:", pathError.Path)
        } else {
            fmt.Println(err)
        }
    }

交流学习

errors 包的一些姿势还要等长时间使用才能完全开发出来,欢迎 朋友提出想法,一起学习。

github

https://github.com/guonaihong/gout

相关文章

  • golang 1.13 errors 包 新函数介绍

    引 这次 errors 包算重量级更新。很有更能把以前的一些设计模式给推到。下面聊下用法。 error 装包 以前...

  • 聊聊golang的error增强

    序 本文主要研究一下golang的error增强 Errors in Go 1.13 golang的1.13版本对...

  • golang Error Wrapping

    go1.13中引入err wraping机制1.13前函数返回一个error errors.New()创建一个er...

  • golang 1.13 errors 包来了,不用写“err 气

    引 这篇是对 errors 包 的姿势挖掘 气功波错误代码 从 http.Get()返回的错误 判断 syscal...

  • Golang学习 - errors 包

    Go 语言使用 error 类型来返回函数执行过程中遇到的错误,如果返回的 error 值为 nil,则表示未遇到...

  • Go中的函数

    在Golang中函数有包内的函数,有包外的函数,还有闭包函数(匿名函数) 包内函数是以小写字母开头的,包外函数是以...

  • golang中unsafe包教程

    unsafe内容介绍 unsafe包只有两个类型,三个函数,但是功能很强大。 unsafe 库让 golang 可...

  • Go语言之unsafe包介绍及使用

    unsafe内容介绍 unsafe包只有两个类型,三个函数,但是功能很强大。 unsafe 库让 golang 可...

  • Golang筑基 ——函数

    定义 golang函数的定义: 特点 在golang中至少有一个main函数每个包只能有一个main函数golan...

  • APUE 进程环境

    本文使用golang的syscall,os,golang.org/x/sys/unix包 1.main函数 mai...

网友评论

      本文标题:golang 1.13 errors 包 新函数介绍

      本文链接:https://www.haomeiwen.com/subject/fsyjmctx.html