Golang学习(2)——errors 包

1160636144 · · 1510 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Golang学习聽-聽errors聽包

--------------------

Go 语言使用 error 类型来返回函数执行过程中遇到的错误,如果返回的 error 值为 nil,则表示未遇到错误,否则 error 会返回一个字符串,用于说明遇到了什么错误。其实 error 只是一个接口,定义如下:

type聽error聽interface {

聽聽聽聽Error() string

}

你可以用任何类型去实现它(只要添加一个 Error() 方法即可),也就是说,error 可以是任何类型,这意味着,函数聽Error聽返回的 string 值实际可以包含任意信息,不一定只是字符串(当然字符串是必须的)。

error聽也不一定表示一个错误,它可以表示任何信息,比如 io 包中就用 error 类型的 io.EOF 表示数据读取结束,而不是遇到了什么错误。再比如 path/filepath 包中用 error 类型的filepath.SkipDir表示跳过当前目录,继续遍历下一个目录,而不是遇到了什么错误。

errors 包实现了一个最简单的 error 类型,只包含一个字符串,它可以记录大多数情况下遇到的错误信息。errors 包的用法也很简单,只有一个 New 函数,用于生成一个最简单的 error 对象:聽

// 将字符串 text 包装成一个 error 对象返回

func聽New(text string) error

--------------------

// 示例

func聽SomeFunc() error {

聽聽聽聽if 遇到错误 {

聽聽聽聽聽聽聽聽return errors.New("遇到了某某错误")聽

聽聽聽聽}

聽聽聽聽return聽nil

}

如果你的程序需要记录更多的错误信息,比如时间、数值等信息,可以声明一个自定义的 error 类型。

--------------------

// 示例

package main

import (

聽聽聽聽"fmt"

聽聽聽聽"time"

)

type myError struct {聽

聽聽聽聽err 聽 string

聽聽聽聽time 聽time.Time聽

聽聽聽聽count int

}

func (m *myError) Error() string {

聽聽聽聽return fmt.Sprintf("%s %d 次。时间:%v", m.err, m.count, m.time)聽

}

func聽newErr(s string, i int) *myError {

聽聽聽聽return &myError{

聽聽聽聽聽聽聽聽err: s,

聽聽聽聽聽聽聽聽time: time.Now(),

聽聽聽聽聽聽聽聽count: i,

聽聽聽聽}

}

var count int

func聽SomeFunc() error {

聽聽聽聽if聽true {

聽聽聽聽聽聽聽聽count++

聽聽聽聽聽聽聽聽return聽newErr("遇到某某情况", count)

聽聽聽聽}

聽聽聽聽return聽nil

}

func聽main() {

聽聽聽聽for i := 0; i < 5; i++ {

聽聽聽聽聽聽聽聽if err := SomeFunc(); err != nil {

聽聽聽聽聽聽聽聽聽聽聽聽fmt.Println(err)

聽聽聽聽聽聽聽聽}

聽聽聽聽}

}


有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:1160636144

查看原文:Golang学习(2)——errors 包

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1510 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传