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

北京专业网站建设网站推广青岛网站排名推广

北京专业网站建设网站推广,青岛网站排名推广,东莞市建设公共交易中心网站首页,东阳建设公司网站系列文章目录 提示#xff1a;goi语言基础文章 GO-异常处理 文章目录 系列文章目录前言一、关键字含义defer /recover 实现异常捕获和处理应用场景deferrecoverpanic 二、实例实例讲解上述几种情况 总结 前言 提示#xff1a;这里可以添加本文要记录的大概内容#xff1a; …系列文章目录 提示goi语言基础文章 GO-异常处理 文章目录 系列文章目录前言一、关键字含义defer /recover 实现异常捕获和处理应用场景deferrecoverpanic 二、实例实例讲解上述几种情况 总结 前言 提示这里可以添加本文要记录的大概内容 Go 语言在运行当中会出现panic 为了解决和避免该问题学习deferpanic, recover 关键字 一、关键字含义 defer /recover 实现异常捕获和处理 defer 主要是指定一个延迟调用函数 recover 发生异常的时候可以去恢复我们的一个协程并且拿到一个导致协程中断的消息。 应用场景 资源释放 文件操作打开文件判断没有错误的情况下立马去声明一个defer 调用(file close)关闭; 网络连接tcp 连接建立连接成功之后就可以调用defer 去关闭异常捕获和处理 方法bi’r结束(异常结束和正常结束)都会触发defer 调用 defer defer 关键字用来声明一个延迟调用函数该函数可以是匿名函数也可以是具名函数defer 延迟函数执行时间(位置方法return 之后返回参数到调用方法之前 A调用B defer 在B方法return 之后但是在B方法值返回之前defer 延迟函数可以在方法返回之后改变改变函数的返回值不是任何值都可改变若依值类型返回不会受影响。依指针全局变量可以改变在方法结束(正常退出异常结束)都会去调用defer声明的延迟函数可以有效避免因异常导致的资源无法释放的问题可以指定多个defer延迟函数多个延迟函数执行顺序为后进先出defer 通常用于资源释放异常捕获等场景。例如 关闭连接关闭文件等defer与recover 配合可以实现异常捕获与处理逻辑不建议在for 循环中使用defer; recover Go 语言内置函数可以让进入宕机流程中的goroutine 恢复过来比如A方法中五个步骤在第三个触发了异常触发了defer 函数那么recover 恢复后第三个步骤之后的步骤是不会执行。恢复协程使应用比较稳定并不意味之按照之前的流程走。recover 仅在延迟函数defer 中有效 在正常的执行过程中调用recover 会返回nil并且没有其他任何效果如果当前的goroutine 出现panic其它语言说的异常,调用recover可以捕获到panic的输入值,并且恢复正常执行 panic Go 语言的一种异常机制可以通过panic 函数主动抛出异常 二、实例 实例讲解上述几种情况 代码如下示例创建dir; main.go case/defer.go // case/defer.go package _caseimport (fmtiologos )// 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/casefunc main() {//_case.DeferCase1()//_case.DeferCase2()//_case.DeferCase3()//_case.ExceptionCase()_case.FileReadCase() }总结 略
http://www.hkea.cn/news/14478140/

相关文章:

  • 网站模板安装好后wordpress界面英文
  • 招聘网站制作公司自己制作简易网页
  • 深圳有没有什么网站网站域名详解
  • h5可以做网站吗图书馆网站建设情况
  • 网站建设检查整改情况报告做代账的网站
  • 营口门户网站建设常德网站开发服务
  • 一个做问卷调查的网站好县网站建设运维情况自查报告
  • 网站建设毕业设计任务书企业网站建设咨询
  • 高端网站建设968江西公共资源交易网
  • 谷歌云做网站wordpress博客功能
  • 网站免费建站app杭州网络运营公司排名
  • 手机版网站制作模板咸宁网站建设网络公司
  • 旅游门户网站有哪些现在电商做的设计用的什么网站
  • 长沙网站推广合作做的怎样 英文网站
  • 邯郸网站开发公司在线建设房屋设计网站
  • 个人网站名称怎么取容易备案网站制作可能出现的问题
  • 河南省级住房城乡建设主管部门网站电子商务网站推广策略主要内容
  • 天津滨海新区小程序网站建设优秀设计案例
  • 网站主体负责人不是法人公司网站开发需求文档
  • 小程序开发哪家好关键词排名优化流程
  • 网站添加站长统计代码营销管理系统
  • 咨询北京国互网网站建设优化推广seo
  • 广州公司网站centos wordpress 空白
  • 移动端网站如何建设新赣州房产网
  • 百度商桥代码怎么加到网站上免费空间和域名
  • 网站建设虚线的代码增城网站建设
  • 民兵信息化网站建设企业展厅设计公司虎
  • 商丘网站建设推广公司地址wordpress安装卡住了
  • 网站建设常用模板下载dede网站地图栏目如何上传文件
  • 泸州网站制作微信引流获客软件