发布于2026-07-12 阅读(0)
扫一扫,手机访问
在 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,永远让调用方知道发生了什么问题。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8