• Golang中的error类型


    ####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?
    }
    
  • 相关阅读:
    linux , nginx: 封禁IP的办法【转】
    分布式之消息队列复习精讲【转】
    RocketMQ 简单梳理 及 集群部署笔记【转】
    ls列出排除的文件
    patch的用法【转】
    python3.6安装 zipimport.ZipImportError: can't decompress data; zlib not available【转】
    为什么用ls和du显示出来的文件大小有差别?【转】
    Python多进程和多线程是鸡肋嘛?【转】
    nginx针对某个url限制ip访问,常用于后台访问限制【转】
    windows服务器卸载补丁命令【转】
  • 原文地址:https://www.cnblogs.com/Goden/p/4601598.html
Copyright © 2020-2023  润新知