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

网站建设的设计总结荣成市信用建设网站

网站建设的设计总结,荣成市信用建设网站,网站建设yingkagou,公司推广方法有哪些系列文章目录 提示:goi语言基础文章 GO-异常处理 文章目录 系列文章目录前言一、关键字含义defer /recover 实现异常捕获和处理应用场景deferrecoverpanic 二、实例实例讲解上述几种情况 总结 前言 提示:这里可以添加本文要记录的大概内容: …

系列文章目录

提示:goi语言基础文章
GO-异常处理


文章目录

  • 系列文章目录
  • 前言
  • 一、关键字含义
    • defer /recover 实现异常捕获和处理
    • 应用场景
    • defer
    • recover
    • panic
  • 二、实例
    • 实例讲解上述几种情况
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

Go 语言在运行当中会出现panic ,为了解决和避免该问题学习defer,panic, recover 关键字


一、关键字含义

defer /recover 实现异常捕获和处理

defer 主要是指定一个延迟调用函数;
recover 发生异常的时候,可以去恢复我们的一个协程,并且拿到一个导致协程中断的消息。

应用场景

  1. 资源释放: 文件操作,打开文件,判断没有错误的情况下,立马去声明一个defer 调用(file close)关闭; 网络连接,tcp 连接建立连接成功之后,就可以调用defer 去关闭;
  2. 异常捕获和处理: 方法bi’r结束(异常结束和正常结束),都会触发defer 调用 ;

defer

  1. defer 关键字用来声明一个延迟调用函数,该函数可以是匿名函数也可以是具名函数
  2. defer 延迟函数执行时间(位置),方法return 之后,返回参数到调用方法之前; A调用B, defer 在B方法return 之后,但是在B方法值返回之前
  3. defer 延迟函数可以在方法返回之后改变改变函数的返回值;不是任何值都可改变,若依值类型返回不会受影响。依指针全局变量可以改变;
  4. 在方法结束(正常退出,异常结束)都会去调用defer声明的延迟函数,可以有效避免因异常导致的资源无法释放的问题;
  5. 可以指定多个defer延迟函数,多个延迟函数执行顺序为后进先出;
  6. defer 通常用于资源释放,异常捕获等场景。例如: 关闭连接,关闭文件等;
  7. defer与recover 配合可以实现异常捕获与处理逻辑;
  8. 不建议在for 循环中使用defer;

recover

  1. Go 语言内置函数,可以让进入宕机流程中的goroutine 恢复过来;比如A方法中五个步骤,在第三个触发了异常触发了defer 函数,那么recover 恢复后第三个步骤之后的步骤是不会执行。恢复协程使应用比较稳定,并不意味之按照之前的流程走。
  2. recover 仅在延迟函数,defer 中有效, 在正常的执行过程中,调用recover 会返回nil并且没有其他任何效果;
  3. 如果当前的goroutine 出现panic(其它语言说的异常),调用recover可以捕获到panic的输入值,并且恢复正常执行;

panic

  1. Go 语言的一种异常机制;
  2. 可以通过panic 函数主动抛出异常

二、实例

实例讲解上述几种情况

代码如下(示例):创建dir; main.go case/defer.go

// case/defer.go
package _caseimport ("fmt""io""log""os"
)// defer 关键字用来声明一个延迟调用函数
// 该函数可以是匿名函数也可以是具名函数
// defer 延迟函数的执行顺序为后进先出
func DeferCase1() {fmt.Println("开始执行DeferCase1")defer func() {fmt.Println("调用了匿名函数1")}()defer f1()defer func() {fmt.Println("调用了匿名函数2")}()fmt.Println("DeferCase1执行结束")
}// 参数预计算
func DeferCase2() {i := 1defer func(j int) {fmt.Println("defer J:", j)}(i + 1)// 闭包defer func() {fmt.Println("defer j:", i)}()i = 99fmt.Println("i:", i)
}// 返回值
// defer 函数执行在return 之后
func DeferCase3() {i, j := f2()fmt.Printf("j:%d,j:%d,g:%d", i, *j, g)
}func f1() {fmt.Println("调用了具名函数1")
}var g = 100func f2() (int, *int) {defer func() {g = 200}()fmt.Println("f2 g:", g)return g, &g
}func FileReadCase() {file, err := os.Open("README.md")if err != nil {log.Fatal(err)}//通过defer 调用资源释放方法defer func() {file.Close()fmt.Println("释放文件资源")}()buf := make([]byte, 1024)for {n, err := file.Read(buf)if err != nil && err != io.EOF {log.Fatal(err)}if n == 0 {break}fmt.Println(buf[:n])}}func ExceptionCase() {defer func() {// 捕获异常, 恢复协程err := recover()// 异常处理if err != nil {fmt.Println("异常处理 defer recover", err)}}()fmt.Println("开始执行ExceptionCase方法")panic("ExceptionCase抛出异常")fmt.Println("ExceptionCase方法执行结束")
}
// main.go
package mainimport _case "defer_recover_panic/case"func main() {//_case.DeferCase1()//_case.DeferCase2()//_case.DeferCase3()//_case.ExceptionCase()_case.FileReadCase()
}

总结

http://www.yayakq.cn/news/839403/

相关文章:

  • 网站备案查询到什么资料慈溪建设银行支行网站
  • asp网站部署 iis7亚马逊注册没有公司网站怎么做
  • 建设银行融信通网站电脑上必玩的游戏
  • 企业网站公司单位有哪些企业推广软文
  • 网站开发研发工程师岗位职责公司比较好
  • 免费的图片做视频在线观看网站seo策略主要包括
  • 营销型网站建设公司地址甘肃路桥建设集团网站
  • 网站mssql 导出数据tornado网站开发 教程
  • 陇西网站建设公司直播盒子
  • 做研学的企业网站做网站多少钱特惠西宁君博s
  • 给小学生做家教的网站哪个网站可以免费做H5
  • wap网站开发怎样做论坛网站
  • 完成一个个人主页网站的制作网页升级跳转自动刷新
  • 营销型网站的建设规划php开源免费网站模板
  • 长春移动端网站设计网站建设哪家效果好
  • 威海网站建设价格家庭装什么宽带最划算
  • 青海省建设厅官方网站建设云舆情分析是个什么行业
  • 网站建设注意什么网站开发 常德
  • 枣庄网站设计1网站免费建站
  • 电子商务网站建设的课程论文好的网页制作公司有哪些
  • 网站优化排名易下拉软件金华市建设局婺城分局网站
  • 昆明网站制作定制公司最新手游2022首发排行
  • 个人网站导航模版汽车网站建设可行性分析
  • 电子商务网站建设与维护论文网上免费推广
  • 台州建网站公司wordpress中文版源码
  • 家用机做网站服务器网站开发与网页设计大作业
  • 上海门户网站建设方案营销平台
  • 网站制作寻找客户淘宝详情页设计一个多少钱
  • 大家做公司网站 都是在哪里做的深圳万户网络科技有限公司
  • 重庆网站建设只选承越你们网站做301