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

在解析中使用自定义错误

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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")
    }
}

  代码输出如下:

1
2
3
4
5
6
7
8
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 @   左扬  阅读(142)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
levels of contents
点击右上角即可分享
微信分享提示