####Golang中的error类型
error类型本身就是一个预定义好的接口,里面定义了一个method

type error interface {
Error() string
}

生成一个新的error并返回

一般有以下几种处理方式:

package main

import (
"errors"
"fmt"
) type Customerror struct {
infoa string
infob string
Err error
} func (cerr Customerror) Error() string {
errorinfo := fmt.Sprintf("infoa : %s , infob : %s , original err info : %s ", cerr.infoa, cerr.infob, cerr.Err.Error())
return errorinfo
} func main() {
//方法一:
//采用errors包的New方法 返回一个err的类型
var err error = errors.New("this is a new error")
//由于已经实现了error接口的方法 因此可以直接调用对应的方法
fmt.Println(err.Error()) //方法二:
//采用fmt.Errof 将string信息转化为error信息 并返回
err = fmt.Errorf("%s", "the error test for fmt.Errorf")
fmt.Println(err.Error()) //方法三:
//采用自定义的方式实现一个error的 一个duck 类型
err = &Customerror{
infoa: "err info a",
infob: "err info b",
Err: errors.New("test custom err"),
} fmt.Println(err.Error()) } /*output:
this is a new error
the error test for fmt.Errorf
infoa : err info a , infob : err info b , original err info : test custom err
*/

golang中的 error package 内容也比较简单,这个package中实现了error中所声明的method(Error)相当于是一个error接口的duck类型。

// Package errors implements functions to manipulate errors.
package errors // New returns an error that formats as the given text.
func New(text string) error {
return &errorString{text}
} // errorString is a trivial implementation of error.
type errorString struct {
s string
} func (e *errorString) Error() string {
return e.s
}

采用fmt.Errorf方法把string类型转化为error类型,在这个方法的内部,先调用fmt包中的Sprintf方法把格式化的输入转化为字符串,在使用 errors.New 方法返回error类型。

采用自定义的error类型可以先判断err的动态类型,再进行下一层的判断。

比如net.Error接口,是一个对原先error接口的再封装。在读取文件的时候判断读取器读取结束的时候的io.EOF。

//io.EOF
var EOF = errors.New("EOF") //net.Error
type Error interface {
error
Timeout() bool // Is the error a timeout?
Temporary() bool // Is the error temporary?
}

Golang中的error类型的更多相关文章

  1. golang中自定义一些类型和对应类型的指针方法

    package main import "fmt" // 项目开发中可以为type声明的类型编写一些方法,从而实现对象.方法的操作 // 声明类型 type myInt int / ...

  2. 【记录一个问题】golang中copy []byte类型的slice无效,为什么?

    有这样一段代码: src := []byte{xxxxx} dst := make([]byte, 0, len(src)) copy(dst, src) //这一行居然没生效! // dst = a ...

  3. 【荐】详解 golang 中的 interface 和 nil

    golang 的 nil 在概念上和其它语言的 null.None.nil.NULL一样,都指代零值或空值.nil 是预先说明的标识符,也即通常意义上的关键字.在 golang 中,nil 只能赋值给 ...

  4. golang拾遗:嵌入类型

    这里是golang拾遗系列的第三篇,前两篇可以点击此处链接跳转: golang拾遗:为什么我们需要泛型 golang拾遗:指针和接口 今天我们要讨论的是golang中的嵌入类型(embedding t ...

  5. golang 中string和int类型相互转换

    总结了golang中字符串和各种int类型之间的相互转换方式: string转成int: int, err := strconv.Atoi(string)string转成int64: int64, e ...

  6. 【记录一个问题】神坑,自定义一个golang的error类型,居然运行崩溃了

    2020-05-20 18:20补充: 感谢yif同学提供指导,出现错误并且打印大量信息的原因是函数递归调用导致栈溢出. 而导致递归调用的关键代码是%v 类型实现了error的interface %v ...

  7. Golang中的坑二

    Golang中的坑二 for ...range 最近两周用Golang做项目,编写web服务,两周时间写了大概五千行代码(业务代码加单元测试用例代码).用Go的感觉很爽,编码效率高,运行效率也不错,用 ...

  8. golang中Context的使用场景

    golang中Context的使用场景 context在Go1.7之后就进入标准库中了.它主要的用处如果用一句话来说,是在于控制goroutine的生命周期.当一个计算任务被goroutine承接了之 ...

  9. golang中的context包

    标准库的context包 从设计角度上来讲, golang的context包提供了一种父routine对子routine的管理功能. 我的这种理解虽然和网上各种文章中讲的不太一样, 但我认为基本上还是 ...

随机推荐

  1. jpa 中的save()方法

    @RequestMapping(value = "", method = RequestMethod.POST) public String postAccount(@Reques ...

  2. hash_table

    #include <ext/pb_ds/hash_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> using name ...

  3. Python修炼之路-函数

    Python编程之函数 程序的三种方式 面向对象:类------->class 面向过程:过程------>def 函数式编程:函数------>def 定义函数 函数:逻辑结构化与 ...

  4. 对url给后台传数据的时候特殊字符需要转义

    URL中的字符只能是ASCII字符,但是ASCII字符比较少,而URL则常常包含ASCII字符集以外的字符,如非英语字符,汉字,特殊符号等等,所以要对URL进行转换.这个过程就叫做URL编码,或者叫U ...

  5. 查看有没有绑这个host

    1.查看有没有绑这个host ping broker.vs.amap.com

  6. linux-ssh加密与https安全-9

    非对称加密算法:RSA,DSA/DSS 对称加密算法:AES,RC4,3DES HASH算法:MD5,SHA1,SHA256 hash就是找到一种数据内容和数据存放地址之间的映射关系 (1) 文件校验 ...

  7. html applet标签 语法

    html applet标签 语法 作用:定义嵌入的 applet. 说明:某些浏览器中依然存在对 <applet> 但是需要额外的插件和安装过程才能起作用.大理石机械构件 注释:HTML5 ...

  8. 视图:setContentView()

    1.setContentView的作用是将View加载到根view之上,这样当显示view时,先显示根view,然后在显示子view,以此类推,最终将所有view显示出来. 2.setContentV ...

  9. Quartz监听器

    1.概念Quartz的监听器用于当任务调度中你所关注事件发生时,能够及时获取这一事件的通知.类似于任务执行过程中的邮件.短信类的提醒.Quartz监听器主要有JobListener.TriggerLi ...

  10. python-opencv学习第一章

    一.opencv读入图像 retval=cv2.imread(文件名[,显示控制参数]) 常用三个参数如下 CV. IMREAD_UNCHANGED 不改变原先什么样子现在就是什么样子 CV. IMR ...