• Go从入门到精通——函数——处理运行时发生的错误示例:在解析中使用自定义错误


    在解析中使用自定义错误

      使用 error.New 定义的错误字符串的错误类型是无法提供丰富的错误信息的。那么,如果需要携带错误信息返回,就需要借助自定义结构体实现错误接口。

      下面代码将实现一个错误解析(ParseError),这种错误包含两个内容:文件名和行号。解析错误的结构还实现了 error 接口的 Error() 方法,返回错误描述时,就需要将文件名和行号返回。

    package main
    
    import (
    	"fmt"
    )
    
    //声明一个解析错误
    type ParseError struct {
    	Filename string
    	Line     int
    }
    
    //实现 error 接口,返回错误描述
    func (e *ParseError) Error() string {
    	return fmt.Sprintf("%s:%d", e.Filename, e.Line)
    }
    
    //创建一些解析错误
    func newParseError(filename string, line int) error {
    	return &ParseError{filename, line}
    }
    
    func main() {
    
    	var e error
    
    	//创建一个错误实例,包含文件名和行号
    	e = newParseError("main.go", 1)
    
    	//通过 error 接口查看错误描述
    	fmt.Println(e.Error())
    
    	//根据错误接口的具体类型,获取详细的错误信息
    	switch detail := e.(type) {
    	case *ParseError:
    		fmt.Printf("Filename: %s Line: %d\n", detail.Filename, detail.Line)
    	default:
    		fmt.Println("other error")
    	}
    }

      代码输出如下:

    Starting: D:\go-testfiles\bin\dlv.exe dap --check-go-version=false --listen=127.0.0.1:64368 from d:\go-testfiles
    DAP server listening at: 127.0.0.1:64368
    Type 'dlv help' for list of commands.
    main.go:1
    Filename: main.go Line: 1
    Process 5208 has exited with status 0
    Detaching
    dlv dap (13720) exited with code: 0
  • 相关阅读:
    Hello,Cnblogs,I'm Kxia
    运维
    CRT 操作数据库乱码
    STM32 各引脚功能
    遍历结果集
    更换税控服务器主板后,重新申请注册码
    修改远程桌面端口号
    nginx 设置开机启动
    windows 日志清理批处理 设置到计划任务就可以每天清理日志了
    按关键字查找文件
  • 原文地址:https://www.cnblogs.com/zuoyang/p/16320979.html
Copyright © 2020-2023  润新知