go错误处理

简介: go错误处理

一、定义错误

import (
  "errors"
  "testing"
)
 
var LessThanTwoError = errors.New("n should bu in [0,100]")
 
//菲波拉数列 变量赋值
func GetFibonacci(n int) ([]int, error) {
  //及早失败
  if n < 0 {
    return nil, LessThanTwoError
  }
  fibList := []int{1, 1}
  for i := 2; i < n; i++ {
    fibList = append(fibList, fibList[i-1]+fibList[i-2])
  }
  return fibList[:n], nil
}
 
func TestExchange(t *testing.T) {
  if v, err := GetFibonacci(-10); err != nil {
    t.Error(err)
  } else {
    t.Log(v)
  }
}
=== RUN   TestExchange
    error_test.go:25: n should bu in [0,100]
--- FAIL: TestExchange (0.00s)
 
FAIL

二、panic、recover()

panic:抛出错误;

recover():捕捉错误;

import (
  "errors"
  "fmt"
  "testing"
)
 
//panic用不不可以恢复的错误
//panic退出前会执行defer指定的内容
 
//os.Exit退出不会执行defer,没有栈调用信息
 
func TestPaincVxExit(t *testing.T) {
  defer func() {
    fmt.Println("Finally!")
  }()
 
  defer func() {
    if err := recover(); err != nil {
      fmt.Println("recover from", err)
    }
  }()
  fmt.Println("start")
  panic(errors.New("something wrong!"))
  //os.Exit(-1)
}
=== RUN   TestPaincVxExit
start
recover from something wrong!
Finally!
--- PASS: TestPaincVxExit (0.00s)
PASS
相关文章
|
7月前
|
SQL 安全 数据库连接
《Go 简易速速上手小册》第6章:错误处理和测试(2024 最新版)(上)
《Go 简易速速上手小册》第6章:错误处理和测试(2024 最新版)
75 1
|
7月前
|
Go 开发者
Go语言中的错误处理与异常机制:实践与最佳策略
【2月更文挑战第7天】Go语言以其独特的错误处理机制而闻名,它鼓励显式错误检查而不是依赖于异常。本文将探讨错误处理与异常机制在Go语言中的实际应用,并分享一些最佳实践,帮助开发者编写更加健壮和易于维护的Go代码。
|
7月前
|
存储 Cloud Native 编译器
云原生系列Go语言篇-错误处理
从其它语言转Go最大的挑战之一就是错误处理。对那些习惯了使用异常的开发者,Go采取的方法有些离经叛道。但Go语言使用的方法蕴含着牢不可破的软件工程原理。本章中,我们学习如何在Go中处理错误。我们会学习Go系统中会停止执行的错误处理panic和recover。
78 0
|
前端开发 数据库连接 Go
Go 语言错误处理为什么更推荐使用 pkg/errors 三方库?
Go 语言错误处理为什么更推荐使用 pkg/errors 三方库?
131 0
|
7月前
|
JSON 测试技术 Go
《Go 简易速速上手小册》第6章:错误处理和测试(2024 最新版)(下)
《Go 简易速速上手小册》第6章:错误处理和测试(2024 最新版)
66 0
|
3月前
|
Go
Go to Learn Go之错误处理
Go to Learn Go之错误处理
51 7
|
4月前
|
Go 开发者
理解Go语言中的错误处理
【8月更文挑战第31天】
29 0
|
4月前
|
Java Go PHP
Go从入门到放弃之错误处理
Go从入门到放弃之错误处理
|
6月前
|
Go
掌握Go语言:Go语言错误处理,从基础到高级,让你的代码更健壮!(33)
掌握Go语言:Go语言错误处理,从基础到高级,让你的代码更健壮!(33)
|
6月前
|
SQL 数据库连接 Go
掌握Go语言:Go语言精细错误,清晰、高效的错误处理实践(32)
掌握Go语言:Go语言精细错误,清晰、高效的错误处理实践(32)