GO语言语法基础9 —— 错误处理
几乎所有编程语言都有错误处理这一常见的编码技巧,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
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01