加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang的errno

发布时间:2020-12-16 18:52:56 所属栏目:大数据 来源:网络整理
导读:在C中,出错信息一般通过errno来处理,一般有两种方式,一种是用标准的errno全局变量, 另一种是自己定义错误码,然后在出错时返回错误码。但这里就涉及到一个线程安全的问题。 那在Golang中是如何处理的呢? Golang 和Python一样支持多值返回。和C一样,Gol

在C中,出错信息一般通过errno来处理,一般有两种方式,一种是用标准的errno全局变量, 另一种是自己定义错误码,然后在出错时返回错误码。但这里就涉及到一个线程安全的问题。 那在Golang中是如何处理的呢?

Golang 和Python一样支持多值返回。和C一样,Golang也可以通过返回错误码来返回错误。 同时Golang也支持CPP等OO里面的异常抛出错误。

多值错误码返回

Golang和Python一样支持多值返回,类似:

func swap(a,b int) (int,int)P{
    return b,a
}
a,b = swap(a,b)

就可以实现两个值得交换。因此我们可以利用该特性在函数返回时多返回一个值表示其错误码。如 io.WriteString,向byte数组中写入字符串,若写入成功,返回的第二个参数err为nil,此时返回的 第一个参数为写入的字符数,若写入失败,则第二个返回值表示出错的出错码。因此检验时写成:

n,err := io.WriteString(yourWriterObject,"test")
if err != nil {
    // deal with error condition
}

在C中,我们返回了错误码的同时,可能还要调用strerror类似的函数来获得该错误码表示的意义,在Golang 中,通过使用error内建类型,我们可以把错误码和其对应的消息封装到一起。

在Golang中所有的错误用error这样的一个类型来表示。其定义为:

type error interface {
    Error() string
}

是一个定义了Error()的接口。 那我们如何使用error呢?一般有两种方式。一种是借助errors模块直接得到一个 带有错误消息(可以调用Error方法返回错误信息)的error对象。另一种方式是自己实现一个error类型,并 实现其Error方法。

按照上面的讨论,我们定义一个类型:
type MyError struct{
    errno int
    msg   string
}
func (e *MyError)Error() string{
    return e.msg
}

这样在使用的时候,我们如下使用即可:

return MyError{-4,"-4 means some error"}

这样返回一个error对象。通过调用该对象的Error方法即可知道出错信息。

在C中我们用一个数字的错误码主要是用来作区别使用,但是在Golang中,我们发现其实结构类型的本身就可以作 为区分。因此标准库提供了一个errors模块,用于用户自定义错误码。

通过errors模块的New方法得到一个含有错误消息的error对象,其定义为:

type errorString struct {
    s string
}

使用方法:

return errors.New("A error occoure")

会为该对象的s赋值“A error occoure”,在调用Error是就会返回该字符串消息。

在项目中的使用

在我们自己使用的时候,可能会将错误进行统一定义。放到一个统一的文件中,如errno.go。

import errors
EXXXSVR_LOAD_URL = errors.New("[XXXSVR]:Load url error")

在使用的时候,直接return

import yourpath.errno
return errno.EXXXSVR_LOAD_URL

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读