0

0

Golang使用errors.New创建基础错误

P粉602998670

P粉602998670

发布时间:2025-09-12 10:57:01

|

475人浏览过

|

来源于php中文网

原创

errors.New用于创建简单错误,仅含消息;需丰富信息时应使用自定义错误类型,结合errors.Is和errors.As安全判断,遵循检查、尽早返回、提供上下文等最佳实践。

golang使用errors.new创建基础错误

使用

errors.New
在 Go 中创建基础错误,本质上就是定义一个带有固定消息的错误类型。它简单直接,但也有局限性。

解决方案

errors.New
是 Go 语言中创建错误最基本的方式。它的用法很简单:

package main

import (
    "errors"
    "fmt"
)

func main() {
    err := errors.New("这是一个自定义错误")
    if err != nil {
        fmt.Println("发生错误:", err)
    }
}

这段代码创建了一个新的错误,错误消息是 "这是一个自定义错误"。

errors.New
返回一个
error
接口类型的值,可以像其他任何错误一样处理它。

立即学习go语言免费学习笔记(深入)”;

什么时候应该用

errors.New
呢? 通常在需要一个简单的、静态的错误消息时使用。 例如,在函数中返回一个已知错误,或者在测试中模拟一个错误。

errors.New
的局限性在于,它创建的错误只包含错误消息,不包含任何其他信息,比如错误发生的上下文、错误码等等。 如果需要更丰富的错误信息,就需要使用自定义错误类型。

自定义错误类型可以包含更多的信息,比如错误码、错误发生的上下文等等。 它们也允许你定义自己的错误处理逻辑。

如何创建自定义错误类型?

package main

import (
    "fmt"
)

type MyError struct {
    Code    int
    Message string
}

func (e *MyError) Error() string {
    return fmt.Sprintf("错误码: %d, 错误消息: %s", e.Code, e.Message)
}

func main() {
    err := &MyError{Code: 1001, Message: "自定义错误"}
    if err != nil {
        fmt.Println("发生错误:", err)
    }
}

这段代码定义了一个名为

MyError
的自定义错误类型,它包含一个错误码和一个错误消息。
Error()
方法实现了
error
接口,返回一个格式化的错误消息。

Magic CMS 网站管理系统2.2.1.alpha 政企版
Magic CMS 网站管理系统2.2.1.alpha 政企版

Magic CMS网站管理系统(政企版)采用PHP+Mysql架构,再原CMS系统的基础上精简出适合企业政府客户使用版本,继承了原系统的快捷,高效,灵活,实用的特点,保留了核心功能,系统支持自定义模版(极易整合dede模板)、支持扩展插件,自定义模型等功能,保留了文章模型,视频模型,图集模型,产品模型,能够胜任企业多种建站需求。BUG修复:1.修改了程序安装时部分数据无法正常导入的错误2.修改了程

下载

使用自定义错误类型可以提供更丰富的错误信息,方便调试和错误处理。

使用

errors.Is
errors.As
进行错误判断

Go 1.13 引入了

errors.Is
errors.As
函数,用于更方便地判断错误类型。
errors.Is
用于判断一个错误是否是另一个错误的包装。
errors.As
用于将一个错误转换为另一个错误类型。

package main

import (
    "errors"
    "fmt"
)

var ErrNotFound = errors.New("资源未找到")

func main() {
    err := fmt.Errorf("获取资源失败: %w", ErrNotFound)

    if errors.Is(err, ErrNotFound) {
        fmt.Println("资源未找到")
    }

    var myErr *MyError
    if errors.As(err, &myErr) {
        fmt.Println("错误码:", myErr.Code)
    }
}

这段代码演示了如何使用

errors.Is
errors.As
函数。
errors.Is
用于判断
err
是否是
ErrNotFound
的包装。
errors.As
用于将
err
转换为
MyError
类型。 为什么要用
errors.Is
errors.As
呢? 因为它们可以更安全地判断错误类型,避免类型断言的风险。

何时应该使用自定义错误类型?

当需要传递额外的错误信息时,比如错误码、错误发生的上下文等等,就应该使用自定义错误类型。 自定义错误类型可以提供更丰富的错误信息,方便调试和错误处理。 另外,如果需要定义自己的错误处理逻辑,也应该使用自定义错误类型。

错误处理的最佳实践是什么?

错误处理是 Go 语言中非常重要的一部分。 一个好的错误处理策略可以提高代码的可靠性和可维护性。 以下是一些错误处理的最佳实践:

  • 始终检查错误: 不要忽略任何错误。 即使你认为错误不太可能发生,也应该检查它。
  • 尽早返回错误: 如果一个函数遇到了错误,应该尽早返回。 这样可以避免不必要的计算,提高代码的效率。
  • 提供有用的错误信息: 错误信息应该足够详细,方便调试。 应该包含错误发生的上下文、错误码等等。
  • 使用
    errors.Is
    errors.As
    进行错误判断
    : 避免使用类型断言,使用
    errors.Is
    errors.As
    可以更安全地判断错误类型。
  • 使用日志记录错误: 应该使用日志记录错误,方便排查问题。

总而言之,

errors.New
适用于简单场景,而自定义错误类型则更适合需要携带更多信息的复杂情况。 正确选择错误处理方式,能显著提升代码的健壮性和可维护性。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

174

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

225

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

335

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

206

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

388

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

193

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

188

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

191

2025.06.17

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.2万人学习

C# 教程
C# 教程

共94课时 | 5.7万人学习

Java 教程
Java 教程

共578课时 | 40.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号