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
posted @ 2022-05-28 18:32  左扬  阅读(134)  评论(0编辑  收藏  举报
levels of contents