首页 > 其他分享 >0096-Go-错误处理

0096-Go-错误处理

时间:2022-10-30 08:46:24浏览次数:76  
标签:return int fmt 42 func arg Go 0096 错误处理

环境

  • Time 2022-08-24
  • Go 1.19

前言

说明

参考:https://gobyexample.com/errors

目标

使用 Go 语言的错误处理。

错误处理

package main

import (
    "errors"
    "fmt"
)

func f1(arg int) (int, error) {
    if arg == 42 {
        return -1, errors.New("can't work with 42")
    }
    return arg + 3, nil
}

func main() {

    for _, i := range []int{7, 42} {
        if r, e := f1(i); e != nil {
            fmt.Println("f1 failed:", e)
        } else {
            fmt.Println("f1 worked:", r)
        }
    }
}

自定义错误

package main

import "fmt"

type argError struct {
    arg  int
    prob string
}

func (e *argError) Error() string {
    return fmt.Sprintf("%d - %s", e.arg, e.prob)
}

func f2(arg int) (int, error) {
    if arg == 42 {
        return -1, &argError{arg, "can't work with it"}
    }
    return arg + 3, nil
}

func main() {

    for _, i := range []int{7, 42} {
        if r, e := f2(i); e != nil {
            fmt.Println("f2 failed:", e)
        } else {
            fmt.Println("f2 worked:", r)
        }
    }
}

类型断言

package main

import "fmt"

type argError struct {
    arg  int
    prob string
}

func (e *argError) Error() string {
    return fmt.Sprintf("%d - %s", e.arg, e.prob)
}

func f2(arg int) (int, error) {
    if arg == 42 {

        return -1, &argError{arg, "can't work with it"}
    }
    return arg + 3, nil
}

func main() {

    _, e := f2(42)
    if ae, ok := e.(*argError); ok {
        fmt.Println(ae.arg)
        fmt.Println(ae.prob)
    }
}

总结

使用 Go 语言的错误处理。

附录

标签:return,int,fmt,42,func,arg,Go,0096,错误处理
From: https://www.cnblogs.com/jiangbo4444/p/16840468.html

相关文章

  • 0097-Go-协程
    环境Time2022-08-24Go1.19前言说明参考:https://gobyexample.com/goroutines目标使用Go语言的协程。启动函数协程packagemainimport("fmt""ti......
  • 0098-Go-通道
    环境Time2022-08-24Go1.19前言说明参考:https://gobyexample.com/channels目标使用Go语言的通道。示例packagemainimport"fmt"funcmain(){ messag......
  • 0099-Go-缓冲通道
    环境Time2022-08-24Go1.19前言说明参考:https://gobyexample.com/channel-buffering目标使用Go语言的缓冲通道。示例packagemainimport"fmt"funcmain......
  • 0100-Go-通道同步
    环境Time2022-08-24Go1.19前言说明参考:https://gobyexample.com/channel-synchronization目标使用Go语言的通道同步。示例packagemainimport("fmt......
  • 0101-Go-通道方向
    环境Time2022-08-24Go1.19前言说明参考:https://gobyexample.com/channel-directions目标使用Go语言的通道,并且指定其方向。示例packagemainimport"fmt"......
  • 0102-Go-通道选择器
    环境Time2022-08-24Go1.19前言说明参考:https://gobyexample.com/select目标使用Go语言的通道选择器。示例packagemainimport("fmt""time")......
  • 0103-Go-超时处理
    环境Time2022-08-24Go1.19前言说明参考:https://gobyexample.com/timeouts目标使用Go语言的通道选择器来处理超时。示例packagemainimport("fmt"......
  • 0083-Go-range 遍历
    环境Time2022-08-23Go1.19前言说明参考:https://gobyexample.com/range目标使用Go语言的range遍历。切片求和packagemainimport"fmt"funcmain(){......
  • 0084-Go-函数
    环境Time2022-08-23Go1.19前言说明参考:https://gobyexample.com/functions目标使用Go语言的函数。定义函数funcplus(aint,bint)int{returna+......
  • 0085-Go-多返回值函数
    环境Time2022-08-23Go1.19前言说明参考:https://gobyexample.com/multiple-return-values目标使用Go语言的函数,返回两个值。直接返回packagemainimport"......