• 技术文章 >后端开发 >Golang

    golang中创建错误的方法

    尚2019-12-07 13:21:40原创3659

    php入门到就业线上直播课:进入学习

    在本教程中,我们会学习如何创建我们自己的自定义错误,并在我们创建的函数和包中使用它。我们会使用与标准库中相同的技术,来提供自定义错误的更多细节信息。

    使用 New 函数创建自定义错误

    创建自定义错误最简单的方法是使用 errors 包中的 New 函数。

    在使用 New 函数 创建自定义错误之前,我们先来看看 New 是如何实现的。如下所示,是 errors 包 中的 New 函数的实现。

    // Package errors implements functions to manipulate errors.
    package errors
    // New returns an error that formats as the given text.
    func New(text string) error {
        return &errorString{text}
    }
    // errorString is a trivial implementation of error.
    type errorString struct {
        s string
    }
    func (e *errorString) Error() string {
        return e.s
    }

    New 函数的实现很简单。errorString 是一个结构体类型,只有一个字符串字段 s。第 14 行使用了 errorString 指针接受者(Pointer Receiver),来实现 error 接口的 Error() string 方法。

    第 5 行的 New 函数有一个字符串参数,通过这个参数创建了 errorString 类型的变量,并返回了它的地址。于是它就创建并返回了一个新的错误。

    现在我们已经知道了 New 函数是如何工作的,我们开始在程序里使用 New 来创建自定义错误吧。

    我们将创建一个计算圆半径的简单程序,如果半径为负,它会返回一个错误。

    package main
    import (  
        "errors"
        "fmt"
        "math"
    )
    func circleArea(radius float64) (float64, error) {  
        if radius < 0 {
            return 0, errors.New("Area calculation failed, radius is less than zero")
        }
        return math.Pi * radius * radius, nil
    }
    func main() {  
        radius := -20.0
        area, err := circleArea(radius)
        if err != nil {
            fmt.Println(err)
            return
        }
        fmt.Printf("Area of circle %0.2f", area)
    }

    在 glayground 上运行

    在上面的程序中,我们检查半径是否小于零(第 10 行)。如果半径小于零,我们会返回等于 0 的面积,以及相应的错误信息。如果半径大于零,则会计算出面积,并返回值为 nil 的错误(第 13 行)。

    在 main 函数里,我们在第 19 行检查错误是否等于 nil。如果不是 nil,我们会打印出错误并返回,否则我们会打印出圆的面积。

    在我们的程序中,半径小于零,因此打印出:

    Area calculation failed, radius is less than zero

    推荐:go语言教程

    以上就是golang中创建错误的方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:golang
    上一篇:golang与java语法上的区别 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 关于golang中的错误处理机制的详细介绍• golang中的bee是指什么• golang中的错误处理方法• golang中的print与fmt的区别
    1/1

    PHP中文网