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