Golang的errno
在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |