2.11 Go之error接口
Error接口作用
开发中常遇到的问题可分为:
-
异常
-
错误
Go
语言的Error
接口就是用来返回错误信息的
特点:
Go
语言中引入error
接口类型作为错误处理的标准模式,如果函数要返回错误,则返回值类型列表中肯定包含error
。error
处理过程类似于C
语言中的错误码,可逐层返回,直到被处理。
Error基本用法
Go语言中Error的源码:
// The error built-in interface type is the conventional interface for
// representing an error condition, with the nil value representing no error.
type error interface {
Error() string
}
分析:
-
定义了一个签名为
Error() string
的方法,实现了一个错误类型 -
一般情况下,如果函数需要返回错误,就将 error 作为多个返回值中的最后一个(并非是强制要求)
创建一个简单的error
:
package main
import (
"errors"
"fmt"
"math"
)
/* 创建error接口 */
func Sqrt(f float64) (float64, error) {
if f < 0 {
return -1, errors.New("方法报错!")
}
return math.Sqrt(f), nil
}
/* 方法调用 */
func main() {
result, err := Sqrt(-13)
if err != nil {
fmt.Println(err)
}else {
fmt.Println(result)
}
}
特点:
使用errors.New
来返回一个错误信息
自定义错误类型
示例代码:
package main
import (
"fmt"
"math"
)
/* 定义错误类型 */
type definedError struct {
Num float64
problem string
}
/* 定义类型实现的接口 */
func (e definedError) Error() string {
return fmt.Sprintf("错误,原因是: \"%f\"是个自然数", e.Num)
}
/* 创建error接口 */
func Sqrt1(f float64) (float64, error) {
if f < 0 {
// 使用自定义错误类型进行返回
return -1, definedError{Num: f}
}
return math.Sqrt(f), nil
}
/* 方法调用 */
func main() {
result, err := Sqrt1(-13)
if err != nil {
fmt.Println(err)
}else {
fmt.Println(result)
}
}
It's a lonely road!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码