当前位置: 首页 > news >正文

烟台教育网站建设西安seo外包优化

烟台教育网站建设,西安seo外包优化,wordpress图片主题免费下载,java做电子商务网站Golang学习笔记_20——error Golang学习笔记_21——Reader Golang学习笔记_22——Reader示例 文章目录 error补充1. 基本错误处理2. 自定义错误3. 错误类型判断3.1 类型断言3.2 类型选择 4. panic && recover 源码 error补充 1. 基本错误处理 在Go中,函数…

Golang学习笔记_20——error
Golang学习笔记_21——Reader
Golang学习笔记_22——Reader示例


文章目录

    • error补充
      • 1. 基本错误处理
      • 2. 自定义错误
      • 3. 错误类型判断
        • 3.1 类型断言
        • 3.2 类型选择
      • 4. panic && recover
    • 源码


error补充

1. 基本错误处理

在Go中,函数通常返回两个值:一个是预期的结果,另一个是error类型的值。
如果函数执行过程中发生错误,error值将不为nil

func divide(a, b float64) (float64, error) {if b == 0 {return 0, errors.New("division by zero")}return a / b, nil
}func error_demo_1() {// 调用 divide 函数进行除法运算result, err := divide(10, 0)if err != nil {// 处理错误println("Error:", err)} else {// 输出结果println("Result:", result)}
}

测试方法

func Test_error_demo_1(t *testing.T) {error_demo_1()
}

输出结果

=== RUN   Test_error_demo_1
Error: (0x105134bc8,0x1400009ef48)
--- PASS: Test_error_demo_1 (0.00s)
PASS

2. 自定义错误

自定义错误类型可以实现error接口,该接口仅包含一个Error方法,返回一个字符串。

// 自定义错误
type MyError2 struct {When stringwhat string
}func (e *MyError2) Error() string {return fmt.Sprintf("when: %s, what: %s", e.When, e.what)
}func testMyError() error {err := &MyError2{When: "now",what: "something wrong",}return err
}

测试方法

func Test_testMyError(t *testing.T) {if err := testMyError(); err != nil {fmt.Println(err)}
}

输出结果

=== RUN   Test_testMyError
when: now, what: something wrong
--- PASS: Test_testMyError (0.00s)
PASS

3. 错误类型判断

3.1 类型断言
// MyError2 是自定义错误类型func ErrorAssertDemo() error {err := &MyError2{When: "now",what: "something wrong",}return err
}func TestErrorAssertDemo() {err := ErrorAssertDemo()if specificErr := err.(*MyError2); specificErr != nil {fmt.Println("specificErr:", specificErr)} else {fmt.Println("normalErr:", err)}
}

测试方法

func Test_ErrorAssertDemo(t *testing.T) {TestErrorAssertDemo()
}

输出结果

=== RUN   Test_ErrorAssertDemo
specificErr: when: now, what: something wrong
--- PASS: Test_ErrorAssertDemo (0.00s)
PASS
3.2 类型选择
// 错误类型选择
// MyError2 是自定义错误类型
func ErrorTypeDemo1() error {return &MyError2{When: "now",what: "myError wrong",}
}func ErrorTypeDemo2() error {return errors.New("normal wrong")
}func switchErrorDemo(err error) {if err != nil {switch err1 := err.(type) {case *MyError2:fmt.Println("myError2:", err1)default:fmt.Println("normal:", err1)}}
}func TestErrorTypeDemo() {err1 := ErrorTypeDemo1()err2 := ErrorTypeDemo2()switchErrorDemo(err1)switchErrorDemo(err2)
}

测试方法

func Test_ErrorTypeDemo(t *testing.T) {TestErrorTypeDemo()
}

输出结果

=== RUN   Test_ErrorTypeDemo
myError2: when: now, what: myError wrong
normal: normal wrong
--- PASS: Test_ErrorTypeDemo (0.00s)
PASS

4. panic && recover

在Go中,panic用于表示一个不可恢复的运行时错误。当panic发生时,程序将停止正常执行,并开始逐级调用已注册的延迟函数(deferred functions),随后程序崩溃。
recover是一个内置函数,用于从panic中恢复。它只能在延迟函数中调用。在正常的执行路径中调用recover将返回nil

// panic 和 recover
func myPanic() {panic("error happened")
}func safeRecover() {defer func() {if err := recover(); err != nil {fmt.Println("recover:", err)}}()myPanic()
}

测试方法

func Test_safeRecover(t *testing.T) {safeRecover()fmt.Println("after recover")}

输出结果

=== RUN   Test_safeRecover
recover: error happened
after recover
--- PASS: Test_safeRecover (0.00s)
PASS

源码

// error_demo_2.go 文件
package error_demoimport ("errors""fmt"
)func divide(a, b float64) (float64, error) {if b == 0 {return 0, errors.New("division by zero")}return a / b, nil
}func errorDemo1() {// 调用 divide 函数进行除法运算result, err := divide(10, 0)if err != nil {// 处理错误println("Error:", err)} else {// 输出结果println("Result:", result)}
}// 自定义错误
type MyError2 struct {When stringwhat string
}func (e *MyError2) Error() string {return fmt.Sprintf("when: %s, what: %s", e.When, e.what)
}func testMyError() error {err := &MyError2{When: "now",what: "something wrong",}return err
}func ErrorAssertDemo() error {err := &MyError2{When: "now",what: "something wrong",}return err
}func TestErrorAssertDemo() {err := ErrorAssertDemo()if specificErr := err.(*MyError2); specificErr != nil {fmt.Println("specificErr:", specificErr)} else {fmt.Println("normalErr:", err)}
}// 类型选择
func ErrorTypeDemo1() error {return &MyError2{When: "now",what: "myError wrong",}
}func ErrorTypeDemo2() error {return errors.New("normal wrong")
}func switchErrorDemo(err error) {if err != nil {switch err1 := err.(type) {case *MyError2:fmt.Println("myError2:", err1)default:fmt.Println("normal:", err1)}}
}func TestErrorTypeDemo() {err1 := ErrorTypeDemo1()err2 := ErrorTypeDemo2()switchErrorDemo(err1)switchErrorDemo(err2)
}// panic 和 recoverfunc myPanic() {panic("error happened")
}func safeRecover() {defer func() {if err := recover(); err != nil {fmt.Println("recover:", err)}}()myPanic()
}
// error_demo_2_test.go 文件
package error_demoimport ("fmt""testing"
)func Test_error_demo_1(t *testing.T) {errorDemo1()
}func Test_testMyError(t *testing.T) {if err := testMyError(); err != nil {fmt.Println(err)}
}func Test_ErrorAssertDemo(t *testing.T) {TestErrorAssertDemo()
}func Test_ErrorTypeDemo(t *testing.T) {TestErrorTypeDemo()
}func Test_safeRecover(t *testing.T) {safeRecover()fmt.Println("after recover")}
http://www.hengruixuexiao.com/news/38831.html

相关文章:

  • 茶叶网站规划seo技术介绍
  • 免费生成网站网址seo网站排名优化培训教程
  • 政府门户网站模板下载怎样在百度上做广告
  • 东莞网站设计精英nba最新消息交易
  • 阿里巴巴批发网站上面怎么做微商佛山竞价账户托管
  • 免费软件下载网站app百度推广介绍
  • 免费推广网站入口2023燕绍兴百度seo
  • ui界面设计软件揭阳百度seo公司
  • 高端网站建设定制it培训机构哪个好一点
  • 广告制作专业系统优化的例子
  • 校园网站怎么做HTML杭州优化外包
  • 生活中花钱请人做网站seo什么意思中文意思
  • 廊坊网站建设服务青岛网络推广公司
  • js做网站框架网站排名首页前三位
  • 网站主编 做啥小红书推广方式
  • 潍坊专业制氮机活性炭多少钱白杨seo
  • 新公司怎么建立自己的网站软文广告素材
  • 可以做游戏的网站有哪些内容佛山网站设计实力乐云seo
  • 网站开发团队简介如何写百度如何搜索网址
  • 山东浩景建设有限公司网站win7优化大师好不好
  • 刚做的网站 搜不到太原网站建设谁家好
  • 网站建设实验感想百度推广竞价是什么意思
  • 电商网站为什么要提高网站友好度网络营销课程个人总结范文
  • 怎么样在网站文章最后做超链接网站关键词快速排名软件
  • 有免费可以做的网站吗南昌seo推广
  • 个人手机版网站app怎么做关键词搜索量怎么查
  • 大气金融投资企业网站模板如何推广自己的微信号
  • 正规手表回收网站提升seo排名
  • 定制网站和模板网站网络推广网络营销外包
  • 腾冲做兼职的网站百度热搜榜排名昨日