• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

GO语言语法基础9 —— 错误处理

武飞扬头像
Lagenteintil
帮助1

几乎所有编程语言都有错误处理这一常见的编码技巧,GO语言也不例外,接下来我们介绍GO语言的错误处理。

下面是一个演示GO语言错误处理的经典例子:

package main
import (
	"errors"
	"fmt"
)

type user struct {
	name     string
	password string
}

func findUser(users []user, name string) (v *user, err error) {
	for _, u := range users {
		if u.name == name {
			return &u, nil
		}
	}
	return nil, errors.New("not found")
}

func main() {
	u, err := findUser([]user{{"wang", "1024"}}, "wang")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(u.name) // wang

	if u, err := findUser([]user{{"wang", "1024"}}, "li"); err != nil {
		fmt.Println(err) // not found
		return
	} else {
		fmt.Println(u.name)
	}
}

错误处理的作用:

用于处理函数执行过程中可能发生的错误情况。Go语言采用返回值来表示错误,通常使用多返回值的方式返回函数执行的结果和可能出现的错误。

1. 错误类型(Error Type) :

  • Go语言内置的error接口类型是表示错误的标准接口,定义如下:
    type error interface {
        Error() string
    }
    
  • 自定义错误类型可以实现error接口,通过自定义的结构体类型提供更多错误信息。

2. 错误生成(Error Generation):

  • 使用errors.New函数创建简单的错误:

    import "errors"
    err := errors.New("something went wrong")
    
  • 使用自定义错误类型创建更丰富的错误:

    type MyError struct {
        Msg string
        Code int
    }
    
    func (e *MyError) Error() string {
        return fmt.Sprintf("Error: %s, Code: %d", e.Msg, e.Code)
    }
    
    err := &MyError{Msg: "something went wrong", Code: 500}
    

3. 错误检查(Error Checking):

  • 使用if语句对可能发生错误的函数调用进行检查:
    result, err := someFunc()
    if err != nil {
        // 处理错误
    } else {
        // 处理成功返回的结果
    }
    

4. 错误传递(Error Propagation):

  • 在函数调用链中,如果遇到错误,可以将错误继续传递到调用者:
    func A() error {
        // ...
        return B()
    }
    
    func B() error {
        // ...
        return C()
    }
    
    func C() error {
        // ...
        return errors.New("something went wrong")
    }
    
    err := A()
    if err != nil {
        // 处理错误
    }
    

5. 错误处理与信息提取:

  • 使用error接口的Error方法获取错误的字符串描述:

    err := errors.New("something went wrong")
    errMsg := err.Error()
    
  • 使用类型断言或类型判断来提取自定义错误类型中的附加信息:

    if myErr, ok := err.(*MyError); ok {
        // 处理自定义错误类型
        fmt.Println(myErr.Msg, myErr.Code)
    }
    

6. 错误处理最佳实践:

  • 建议使用多个返回值的方式返回错误,并在函数调用处进行错误检查。
  • 错误信息应该清晰明了,提供足够的上下文和调试信息。
  • 遇到错误时,及时处理并记录错误,避免将错误隐藏或忽略。
  • 使用自定义的错误类型可以提供更多的错误信息,有助于问题的定位和处理。

总结:

总而言之,通过合理的错误处理,可以使程序更加健壮,减少潜在的问题和错误。在编写代码时,要养成良好的错误处理习惯,并根据实际情况选择合适的错误处理策略。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgbchec
系列文章
更多 icon
同类精品
更多 icon
继续加载