美文网首页
go中的错误生成与处理

go中的错误生成与处理

作者: 护念 | 来源:发表于2023-11-06 21:26 被阅读0次

错误生成与处理

go中的错误生成与定制相对还是比较简单,error是go中的错误类型,如下:

type error interface {
  Error() string // 自定义错误类型只需要实现这个方法就行
}

go中生成错误主要有以下几种方式:

  1. errors.New()
  2. fmt.Errorf()
  3. 自定义错误类型

下面我们分别看下

1. errors.New()

简单的生成error

package main

import (
    "errors"
    "fmt"
)

func main() {
    if err := doSomething(); err != nil {
        fmt.Println(err)
        //  do something failed
    }
}

func doSomething() error {
    // 非常简单直接放字符串就行
    return errors.New("do something failed")
}

2. fmt.Errorf

格式化error

package main

import (
    "fmt"
)

func main() {
    if err := doSomething1(); err != nil {
        fmt.Println(err)
        //  do something1 failed
    }
}

func doSomething1() error {
    // 可以提供占位符
    return fmt.Errorf("do %s failed", "something1")
}

3. 自定义错误类型

package main

import (
    "fmt"
)

func main() {
    if err := doSomething2(); err != nil {
        fmt.Println(err)
        //  code: 500 message: Unknown error
    }
}

// 自定义错误类型
type MyError struct {
    code string
    msg  string
}

// 实现error interface的Error
func (e MyError) Error() string {
    return fmt.Sprintf("code: %s message: %s", e.code, e.msg)
}

func doSomething2() error {
    // 使用自定义的错误类型
    return MyError{code: "500", msg: "Unknown error"}
}

上面介绍了错误生成,下面来看下错误处理,错误处理除了上面简单粗暴的打印错误外,还有两种:

  1. errors.Is - 通过错误值判断
  2. errors.As - 通过类型判断

4. 错误处理errors.Is

package main

import (
    "fmt"

    "errors"
)

func main() {
    if err := doSomething2(); err != nil {
        // 错误等值判断
        if errors.Is(err, UnknownError) {
            fmt.Println(err)
            // code: 500 message: Unknown error
        }
    }
}

// 自定义错误类型
type MyError struct {
    code string
    msg  string
}

// 这里实现将错误列出来
var UnknownError = MyError{code: "500", msg: "Unknown error"}

// 实现error interface的Error
func (e MyError) Error() string {
    return fmt.Sprintf("code: %s message: %s", e.code, e.msg)
}

func doSomething2() error {
    // 可以提供占位符
    return MyError{code: "500", msg: "Unknown error"}
}

5. 错误处理errors.As

类型判断

package main

import (
    "fmt"

    "errors"
)

func main() {
    if err := doSomething2(); err != nil {
        // 类型判断这里要传指针
        if errors.As(err, &MyError{}) {
            fmt.Println(err)
            // code: 500 message: Unknown error
        }
    }
}

// 自定义错误类型
type MyError struct {
    code string
    msg  string
}

// 实现error interface的Error
func (e MyError) Error() string {
    return fmt.Sprintf("code: %s message: %s", e.code, e.msg)
}

func doSomething2() error {
    // 可以提供占位符
    return MyError{code: "500", msg: "Unknown error"}
}

相关文章

  • 9. Go错误类型及错误处理

    9. Go错误类型及错误处理 Go 错误是指程序执行过程中遇到与设计流程不相符的情况,引发的人为的或自动的反馈机制...

  • 【golang】go install与go build的区别

    go install与go build都可生成执行文件 go build 会生成可实行文件放在当前目录中。 go ...

  • Go 并发编程:错误处理及错误传递

    一、协程错误管理 我们在基础系列讲过Go程序开发中的错误处理规范,展示了几种函数执行中的错误返回问题,而在Go并发...

  • Go 语言基础——错误处理

    学习目标 掌握错误处理 掌握自定义错误处理 掌握defer关键字的使用 错误处理 GO没有异常处理机制 Go语言引...

  • Golang 学习笔记八 错误异常

    一、错误异常 《快学 Go 语言》第 10 课 —— 错误与异常Go 语言的异常处理语法绝对是独树一帜,在我见过的...

  • 2021-06-08

    Go的编程模式,错误处理 引入了其他语言的错误处理模式,最后,说明Go错误处理的好处。主要是将函数的入参、出参、错...

  • 基础-3

    异常处理 error接口:Go中的一个关于错误处理的标准模式,属于Go内建的接口类型;type error int...

  • Learn Golang in Days - Day 15-Go

    Learn Golang in Days - Day 15-Go错误处理 简介 Go语言通过内置错误接口提供了简单...

  • 8 Go错误与异常:error、panic、recover

    一、程序设计中的错误和异常处理 对错误和异常处理的支持是现代编程语言的标配,在Go语言中,程序的错误由内建的err...

  • golang

    golang go和php的区别类型:go为编译性语言;php解释性语言错误:go的错误处理机制;php本身或者框...

网友评论

      本文标题:go中的错误生成与处理

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