在 Golang 里,错误处理没有 try-catch 那种语法糖,全靠返回值来传递。这听起来可能有点原始,但用习惯了反而觉得清晰可控——每个错误都明明白白地摆在眼前,躲都躲不掉。Debian 系统上写 Go,和其他 Linux 发行版完全一样,没啥特殊之处,下面的方法在哪儿都能用。

下面聊聊几个实用的错误处理套路,都是日常开发中高频出现的手法:
自定义错误,用
errors包就能搞定
不用搞太复杂,errors.New()直接返回一个错误常量,清晰又利索。比如定义var ErrInvalidInput = errors.New("invalid input"),后续所有非法输入都能用这个统一标识。import "errors" var ErrInvalidInput = errors.New("invalid input")函数返回值里带上 error
这是 Go 的惯用模式——函数不光返回结果,还得返回一个 error,把“可能失败”这件事明明白白告诉调用方。比如:func myFunction(input int) (int, error) { if input < 0 { return 0, ErrInvalidInput } // ... }调用时别偷懒,先检查 error
很多新人容易忽略这一步,结果跑着跑着就 panic 了。正确姿势就是拿到返回值后立刻判断if err != nil,然后再决定是继续还是优雅退出。result, err := myFunction(-1) if err != nil { fmt.Println("Error:", err) } else { fmt.Println("Result:", result) }用
errors.Is和errors.As精准捕获特定错误
有时候错误不是一个简单字符串,而是一个结构体,里面带更多上下文。这时候errors.Is可以帮你判断是不是某个具体错误,而errors.As能把底层错误转换成你需要的类型。举个例子:type MyError struct { Msg string } func (e *MyError) Error() string { return e.Msg } func myFunction() error { return &MyError{"something went wrong"} } func main() { err := myFunction() if errors.Is(err, &MyError{}) { fmt.Println("Caught a MyError:", err) } else { fmt.Println("Caught an unknown error:", err) } }别让
panic搞崩整个程序——用defer+recover兜底
虽然 Go 官方不鼓励滥用 panic,但有些场景(比如第三方库突然炸了)还是得有个保护伞。在defer里调用recover(),就能捕获到 panic 的异常信息,让程序平稳恢复。典型写法如下:func main() { defer func() { if r := recover(); r != nil { fmt.Println("Recovered from panic:", r) } }() panic("something went wrong") }
掌握了这几个基础招式,在 Debian(或者说任何系统)上写 Go,错误处理这块儿基本能稳稳拿捏住。记住关键原则:永远检查 error,永远让调用方知道发生了什么问题。