Go中有一个名为error的内置接口,定义如下:

  type error interface {

Error() string   
}
  Go是使用一个独立的·明确的返回值来传递错误信息的。这与使用异常的 Java 和 Ruby 以及在 C 语言中经常见到的超重的单返回值/错误值相比,Go 语言的处理方式能清楚的知道哪个函数返回了错误,并能想调用那些没有出错的函数一样调用。
  看一段实验楼的代码:
package mainimport "errors"
import "fmt"// 按照惯例,错误通常是最后一个返回值并且是 `error` 类
// 型,一个内建的接口。
func f1(arg int) (int, error) { if arg == 42 { // `errors.New` 构造一个使用给定的错误信息的基本 // `error` 值。 return -1, errors.New("can't work with 42") } // 返回错误值为 nil 代表没有错误。 return arg + 3, nil } // 通过实现 `Error` 方法来自定义 `error` 类型是可以得。 // 这里使用自定义错误类型来表示上面的参数错误。 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 { // 在这个例子中,我们使用 `&argError` 语法来建立一个 // 新的结构体,并提供了 `arg` 和 `prob` 这个两个字段 // 的值。 return -1, &argError{arg, "can't work with it"} } return arg + 3, nil } func main() { // 下面的两个循环测试了各个返回错误的函数。注意在 `if` // 行内的错误检查代码,在 Go 中是一个普遍的用法。 for _, i := range []int{7, 42} { if r, e := f1(i); e != nil { fmt.Println("f1 failed:", e) } else { fmt.Println("f1 worked:", r) } } for _, i := range []int{7, 42} { if r, e := f2(i); e != nil { fmt.Println("f2 failed:", e) } else { fmt.Println("f2 worked:", r) } } // 你如果想在程序中使用一个自定义错误类型中的数据,你 // 需要通过类型断言来得到这个错误类型的实例。 _, e := f2(42) if ae, ok := e.(*argError); ok { fmt.Println(ae.arg) fmt.Println(ae.prob) } } 

运行程序

$ go run errors.go
f1 worked: 10
f1 failed: can't work with 42
f2 worked: 10
f2 failed: 42 - can't work with it 42 can't work with it 

转载于:https://www.cnblogs.com/Ellon-Daris/p/5505289.html

golang错误处理(实验楼)相关推荐

  1. Golang错误和异常处理的正确姿势

    Golang错误和异常处理的正确姿势 错误和异常是两个不同的概念,非常容易混淆.很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误.从 ...

  2. Golang 错误处理机制详解

    本文介绍Golang错误处理机制,包括不同类型错误处理.定义运行时错误等内容. golang错误处理机制 Go错误处理类似C语言,没有提供任何异常,以及类java语言使用的try/catch异常处理机 ...

  3. Golang 错误捕获 Panic 与 Recover

    Golang 错误捕获 Panic 与 Recover,我抓住你了,Error Golang轻松学习 文章目录 Golang 错误捕获 Panic 与 Recover,我抓住你了,Error 一.Go ...

  4. golang错误处理

    Go语言主要的设计准则是:简洁.明白,简洁是指语法和C类似,相当的简单,明白是指任何语句都是很明显的,不含有任何隐含的东西,在错误处理方案的设计中也贯彻了这一思想.我们知道在C语言里面是通过返回-1或 ...

  5. Golang错误处理机制

    基础 错误处理应该时工程的一部分,Golang中的error是一个interface类型,如下: type error interface {Error() string } 凡是实现Error()方 ...

  6. 爆肝3天只为Golang 错误处理最佳实践

    对于开发者来说,要是不爽Go错误处理,那就看看最佳实践.Go可能引入try catch吗?那可能估计有点难度.本文简单介绍Go为什么选择这样的错误处理和目前常见处理方式,并梳理常见Go错误处理痛点,给 ...

  7. 【GoLang】GoLang 错误处理 -- 异常处理思路示例

    代码: package mainimport ("fmt"// "testing" )var Pkg = "packageName"type ...

  8. golang错误处理机制(异常处理)

    看一段代码,引入错误处理 对上面代码的总结: 在默认情况下,当发生错误后(panic) ,程序就会退出(崩溃.) 如果我们希望:当发生错误后,可以捕获到错误,并进行处理,保证程序可以继续执行.还可 以 ...

  9. golang错误:The process cannot access the file because it is being used by another process

    情况一,创建文件后再删除: func main() {NewConfigIni()DeleteConfigTemp() }func DeleteConfigTemp() {path := " ...

最新文章

  1. oracle schema_Oracle数据库坏块检查与修复
  2. php byte转 宽字符,C++宽字符与普通字符的转换实例详解
  3. PAT 1003 Emergency 递归记录访问路径
  4. C++11 就地初始化与列表初始化
  5. mysql 正则表达式 regExp
  6. 做游戏代理要找游戏源码平台
  7. Packet Tracer 思科模拟器入门教程 之一 初识Packet Tracer
  8. Ceph测试工具总结
  9. J2Cache+Spring注入配置参数,无需读取固定路径下的j2cache.properties配置文件
  10. U盘文件夹被隐藏,如何让去除文件夹隐藏属性
  11. 两个自然数互素(relatively prime)
  12. java实现文件的加密,Java实现文件的加密解密功能示例
  13. TeamViewer的LAN局域网内连接
  14. PXC高可用集群总结
  15. MetaCoMET----核心微生物组分析在线工具
  16. 软工网络15个人阅读作业1(201521123007谭燕)
  17. STM32F1系列超声波测距程序
  18. 一次简单的路由器渗透
  19. 如何使用VMware虚拟机(带你快速了解)
  20. 计算机丢失UxTheme无法修复,win10系统丢失uxtheme.dll的修复办法

热门文章

  1. Android开发实例之多点触控程序
  2. SQL2005 属性 IsLocked 不可用于 登录[sa]
  3. 将frm,myi,myd文件打包成sql文件
  4. ORACLE EBS中OAF屏蔽的错误
  5. Intermission
  6. gmail怎么延时发送邮件呢?
  7. xjtlu mac mail 绑定
  8. formal method里面的并发问题
  9. 苹果系统的自带的系统录屏软件中新录制的视频会出现在这里!
  10. 一切成功的秘诀都蕴含在这个公式里面