Golang从入门到精通(二十):Golang错误处理之error
2017-12-14 11:07
330 查看
Golang的错误处理是一个被大家经常拿出来讨论的话题(另外一个是泛型) 。
Golang中引入
这个设计也正好体现了Go哲学中的“正交”理念:error context与error类型的分离。无论error context是int、float还是string或是其他,统统用error作为返回值类型即可。
一般情况下,如果函数需要返回错误,就将 error 作为多个返回值中的最后一个(但这并非是强制要求)。
我们来用一个开方函数简单示范下 Go 语言中 error 的用法:
以上是 error 的使用方法:使用errors.New 可返回一个错误信息。与其他语言的异常相比,Golang 的方法相对更加容易、直观。
Golang中引入
error接口类型作为错误处理的标准模式,如果函数要返回错误,则返回值类型列表中肯定包含
error。
error处理过程类似于C语言中的错误码,可逐层返回,直到被处理。
error基本用法
error类型实际上是抽象了
Error()方法的
error接口,
Golang使用该接口进行标准的错误处理。
error对应源代码如下:
type error interface { Error() string }
这个设计也正好体现了Go哲学中的“正交”理念:error context与error类型的分离。无论error context是int、float还是string或是其他,统统用error作为返回值类型即可。
一般情况下,如果函数需要返回错误,就将 error 作为多个返回值中的最后一个(但这并非是强制要求)。
我们来用一个开方函数简单示范下 Go 语言中 error 的用法:
package main import ( "errors" "fmt" "math" ) func Sqrt(f float64) (float64, error) { if f < 0 { return -1, errors.New("math: square root of negative number") } return math.Sqrt(f) , nil } func main(){ result, err:= Sqrt(-13) if err != nil { fmt.Println(err) }else{ fmt.Println(result) } }
以上是 error 的使用方法:使用errors.New 可返回一个错误信息。与其他语言的异常相比,Golang 的方法相对更加容易、直观。
error进阶用法
除了上面的errors.New 用法之外,我们也可以实现error接口,自己实现Error() 方法,来达到自定义参数的错误输出。示例代码如下:package main import ( "fmt" "math" ) type dualError struct { Num float64 problem string } func (e dualError) Error() string { return fmt.Sprintf("Wrong!!!,because \"%f\" is a negative number",e.Num) } func Sqrt(f float64) (float64, error) { if f < 0 { return -1, dualError{Num:f} } return math.Sqrt(f) , nil } func main(){ result, err:= Sqrt(-13) if err != nil { fmt.Println(err) }else{ fmt.Println(result) } }
相关文章推荐
- 【GoLang】GoLang 错误处理 -- 使用 error is value 的思路处理,检查并处理error
- HTTP 错误 500.21 - Internal Server Error 处理程序“ExtensionlessUrlHandler-ISAPI-4.0_64bit”在其模块列表中有一个错误模块“IsapiModule” 解决方法
- android Installation error: INSTALL_FAILED_CONTAINER_ERROR错误的处理
- 关于ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
- java.lang.OutOfMemoryError: Java heap space错误及处理办法(收集整理、转) .
- PHP5的异常处理机制[3]--PHP5之前的错误处理之trigger_error()
- java.lang.OutOfMemoryError: Java heap space错误及处理办法(收集整理、转)
- ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
- java.lang.OutOfMemoryError: Java heap space错误及处理办法(收集整理、转)
- Sys.WebForms.PageRequestManagerServerErrorException: 在服务器上处理请求时出现未知错误。服务器返回的状态码为: 500
- silverlight应用程序中未处理的错误代码:2104 类别:InitializeError 消息:无法下载 iis上部署Silverlight
- Error-in-javascript 错误处理
- ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法 .
- asp.net错误捕获(错误处理)page_error事件使用方法
- Golang巧用defer进行错误处理的方法
- STL-----错误(error)处理和异常(exception)处理
- Alamofire源码解读系列(二)之错误处理(AFError)
- (6)LUA程序设计-编译执行与错误(compile 、run & error)处理
- set_error_handler() 顾名思义,自定义错误的处理
- 翻译golang的一篇文章-Go 语言的错误处理