Go语言学习笔记 --- defer 、panic 、recover

【文本分析学习】Anaconda+pytorch虚拟环境下的pycharm文本分析(含分词、词性标注、词形归一化、停用词、文本情感分析、词频、文本相似度,附数据代码) NLTK 文本分析学习之 Anadconda+pytorch虚拟环境下的pycharm文本分析(含分词、词性标注、词形归一化、停用词、文本情感分析、词频、文本相似度,附数据代码) 阅读详情

学习笔记根据 无闻 go语言基础教程 整理

defer、panic、recover

  • 执行方式类似其他语言中的析构函数,在函数体执行结束后按照调用顺序的相反顺序逐个执行
  • 即使函数发生严重错误也会执行,类似finally
  • 支持匿名函数的调用
  • 常用于文件清理、文件关闭、解锁以及记录时间等操作
  • 通过与匿名函数配合可在return之后修改函数计算结果
  • 如果函数体内某个变量作为defer时匿名函数的参数,则在定义defer时即已获得了拷贝,否则则是引用某个变量的地址
  • Go 中没有异常机制,但有panic/recover模式来处理错误
  • panic 可以在任何地方引发,但recover只有在defer调用函数中有效
  • 示例代码:
package main

import (
    "fmt"
)

func main() {

}

// defer 定义的先被调用,逆序向上调用
func test1() {
    fmt.Println("a")
    defer fmt.Println("b")
    defer fmt.Println("c")
    /*
    // 输出结果
    a
    c
    b

    */
}

// 继续测试,逆向调用
func test2() {
    for i := 0; i < 3; i++ {
        defer fmt.Println(i)
    }
    /*
    // 输出结果
    2
    1
    0

    */
}

// 使用匿名函数测试
func test3() {
    for i := 0; i < 3; i++ {
        defer func () {
            fmt.Println(i) // 此时defer改变了i作为地址的引用,一直引用这个局部变量i
        }()
    }
    /*
    // 输出结果
    3
    3
    3

    */
}

// 测试panic
func test4() {
    fmt.Println("Func in 4")
}

func test5() {
    // defer 函数必须先调用,然后再执行panic
    // 通过defer把程序从panic状态recover恢复回来
    defer func() {
        if err:=recover(); err != nil {
            fmt.Println("Recover in 5")
        }
    }
    panic("Panic in 5") // panic之后的所有语句都不会执行
}

func test6() {
    fmt.Println("Func in 6")
}

func test456T() {
    test4() // Func in 4
    test5() // Recover in 5
    test6() // Func in 6
}
强化学习-----DQN(Deep Q-network) DQN(Deep Q-Network)是一种基于深度学习和强化学习的算法,由DeepMind提出,用于解决离散动作空间下的马尔科夫决策过程(MDP)问题。它是首个成功将深度学习应用于解决强化学习任务的算法之一。DQN,即深度Q网络(Deep Q-network),是指基于深度学习的Q-Learing算法。那什么是Q-leaning?可以看上一篇文章Q-learning是一种经典的强化学习算法,用于解决马尔可夫决策过程(Markov Decision Process,MDP)中的控制问题。 阅读详情

相关推荐

【代码审计】RuoYi定时任务漏洞:从SQL注入到RCE的攻防演变

本文深入剖析了RuoYi框架定时任务模块从早期版本无校验到引入黑白名单机制,再到被组合利用实现RCE的完整漏洞演变过程。文章详细分析了SQL注入与定时任务功能结合导致的远程代码执行漏洞,并总结了代码审计与安全开发的核心要点,为开发者提供了重要的安全参考。

yellow的专栏 702

Go panic 与 recover 异常处理

异常处理 Golang 没有结构化异常,使用 panic 抛出错误,recover 捕获错误。 异常的使用场景简单描述:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。 panic 1、内置函数 2、假如函数F中书写了panic语句,会终止其后要执行的代码,在panic所在函数F内如果存在要执行的defer函数列表,按照defer的逆序执行 3、...

爱死亡机器人 2381

Zabbix 7.0 从入门到精通部署手册

zabbix 入门到精通

weixin_43806846的博客 1033

defer, panic, recover使用总结

1. defer : 延迟调用。多个defer,依次入栈,在函数即将退出时,依次出栈调用 1 package main 2 import "fmt" 3 func main() { 4 defer func() { 5 fmt.Println("defer one")   6 }() 7 defer func() ...

a15013326978的博客 564

状态机设计与实现( stm32小车避障为例)

本文以STM32小车避障为例,介绍了状态机设计与实现方法。首先阐述了状态机的事件驱动特性、清晰结构和易扩展优势,并给出硬件组成框架。核心实现部分展示了状态枚举定义、状态转移图和主循环框架,通过switch-case结构实现状态切换。关键状态示例包括前方扫描和转向决策逻辑,通过传感器数据驱动状态转移。总结指出状态机设计需定义枚举状态、实现状态函数、使用switch跳转并更新全局状态。文章最后声明内容为学习笔记,欢迎读者指正交流。全文结构清晰,代码示例具体,为嵌入式系统状态机设计提供了实用参考。

2302_80219536的博客 1050

从想法到零件:手把手拆解一个汽车功能如何从PRD写到SSTS和CTS

本文详细拆解了汽车电子需求从市场文档(MRD)到零部件技术规范(CTS)的完整流程,以雨天自动关窗功能为例,展示了PRD、SSTS和CTS的编写要点与交互设计。文章重点解析了系统分解的艺术和零部件落地的精确参数要求,为汽车电子工程师提供了从概念到实现的全流程实践指南。

weixin_30300225的博客 481

GoLang之defer、panic、recover

GoLang之defer、panic、recover

weixin_52690231的博客 1322

Unity中使用TCP和UDP传输摄像头视频的实践

本文探讨了在Unity中通过TCP和UDP协议传输摄像头视频的实现方法。TCP通过自定义消息帧保证数据完整性但效率较低,UDP传输速度快但可能丢帧。文章提供了Python和Unity的代码示例,分析了两种协议的适用场景:TCP适合要求数据完整性的应用,UDP则适合追求实时性的场景。最终选择取决于具体需求,并需要注意线程安全与同步机制。

m0_74337424的博客 145

Go 错误处理指北:Defer、Panic、Recover 三剑客

Go 语言中的错误处理不仅仅只有 if err != nil,defer、panic 和 recover 这三个相对来说不不如 if err != nil 有名气的控制流语句,也与错误处理息息相关。本文就来讲解下这三者在 Go 语言中的应用。Deferdefer 是一个 Go 中的关键字,通常用于简化执行各种清理操作的函数。defer 后跟一个函数(或方法)调用,该函数(或方法)的执行会被推迟到外...

Go中国 638

vmvare kali如何配置桥接模式进行上网

注意点:虚拟机可以PING通物理机,但是PING不通其他的网站。经过收集资料,得知由于是校园网连接,所以DHCP只能分配一个授权的IP地址给连接的主机,由于KALI是桥接物理机,物理机已经获得了这个授权的IP,所以导致桥接的虚拟机无法上网。所以不是因为配置的有问题,而是网络的安全设置导致了桥接失败。如果你是使用校园网,可以换个网络试试,使用校园网的时候,可能会遇到桥接失败。

猿小白的博客 1409

Spring Boot Jar包加密实战:用ClassFinal与Jasypt打造代码安全堡垒

Spring Boot代码加密与配置保护方案 针对Spring Boot项目源码和配置易被反编译的风险,本文提出ClassFinal字节码加密+Jasypt配置加密的组合方案。ClassFinal通过Maven插件对核心代码加密,运行时需JavaAgent加载,反编译后仅保留空方法体;Jasypt则采用强加密算法保护敏感配置。方案优势包括: 双重保护:ClassFinal加密业务逻辑,Jasypt加密数据库密码等配置 灵活部署:支持密码启动、机器绑定等安全策略 平滑集成:兼容Spring生态,动态解密结合配

墨夶的博客 1092

【译】defer-panic-and-recover

Go 有通用的控制流程:if,for,switch,goto。它也有go语句用于让代码运行在单独的协程。这里我将讨论一些不常见的问题:defer,panic 和 recover。该过程继续在堆栈中向上移动,直到当前协程 中的所有函数都返回,此时程序崩溃。失败,函数将在不关闭源文件的情况下返回。,但如果函数更复杂,则问题可能不那么容易被注意到和解决。,并在到达协程调用堆栈顶部时终止程序。这个保存调用的列表在函数返回后执行。在继续阅读之前,请尝试想象此程序的输出可能是什么。语句的行为是简单直接且可预测的。

编程点滴 153

OpenClaw三层记忆系统:让你的AI助理记住你的习惯,越用越顺手

对于更早的、已经移出滑动窗口的对话内容,我们没有直接丢弃,而是用大模型做摘要压缩,只保留核心信息,然后把摘要存入短期会话记忆的末尾,或者长期用户记忆。比如,10轮之前的对话内容,我们会压缩成:“用户之前查询了仓山万达店4月1日-4月7日的库存数据,对报表的要求是纯文本,不要Markdown”,既保留了核心信息,又不会占用太多上下文窗口。如果说Agent的执行链路是AI的“骨架”,工具调用体系是AI的“手脚”,那么记忆系统就是AI的“大脑”

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 379

关于《Go语言学习笔记》这本书

#关于《Go语言学习笔记》这本书 书如其名,真的算是一本笔记,书中大量篇幅都是代码块,文字介绍较少,基础理论内容也很少, 更多的是对某一些特性和一些用法上做实践,并且如果你细读的话也会发现一些写错的地方。 如果非要嗑这本书 建议先看一遍**《Go by Example 中文版》**,对基本使用和语法有一定了解后再嗑 笔者下卷部分并没有继续看,因为感觉还不到看源码的时候,所以再深造一段时间在回来看一下。 这里粗略的整理一下知识点,没时间看这本书,可以看一下笔者整理的部分,并不全,也只是针对笔者感兴趣的地方进行

xiao4-800K的博客 1321

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

GO语言学习笔记——详细版

GO语音个人学习笔记——详细版

qq_41201689的博客 1433

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Go 专栏|错误处理:defer,panic 和 recover(1),2024年最新338页网易Golang面试真题解析火爆全网

后边会接一个函数,但该函数不会立刻被执行,而是等到包含它的程序返回时(包含它的函数执行了。语句不到函数的最后一刻是不会执行的,所以下面这段代码很可能会用尽所有文件描述符。暂时看不懂也没有关系,等学会了接口之后,再回过头来看这段代码,应该就豁然开朗了。(img-HqfU4PsO-1713305303575)]一般情况下,在程序里记录错误日志,就可以帮助我们在碰到异常时快速定位问题。语句经常成对出现,比如打开和关闭,连接和断开,加锁和解锁。但还有一些错误比较严重的,比如数组越界访问,程序会主动调用。

2401_84301389的博客 978

defer、panic、recover

一个朋友跑来问我一下这段代码,我觉得很有趣,涉及到的知识点挺多的,所以想谈谈这段代码。 话不多说,上代码: // 注:这段代码来自《go语言学习笔记》 func catch() { log.Printl("catch:", recover()) } func main() { defer catch() defer log.Printl(recover()) defer recover(...

林小默 333

Go语言学习日记【三十二】golang代码错误处理【error,defer,recover】

代码异常处理是学习任何编程语言都需要考虑的一个重要话题。比如C++,python都引入exception的概念和try_catch try_except的引入。golang自然也有自己独特的异常处理方式。漂亮的异常处理方式也是golang语言最大的亮点之一,下面重点解析一下golang错误处理方式。

没枕头我咋睡觉 1387

go语言学习-panic 和 recover (三十二)

转载自:https://golangbot.com/panic-and-recover/ 什么是 panic? 在 Go 程序中,一般是使用错误来处理异常情况。对于程序中出现的大部分异常情况,错误就已经够用了。 但在有些情况,当程序发生异常时,无法继续运行。在这种情况下,我们会使用 panic 来终止程序。当函数发生 panic 时,它会终止运行,在执行完所有的defer函数后,程序控制返回到该函...

这个名字想了很久 777

2024年最全Go 专栏|错误处理:defer,panic 和 recover(1),2024年最新帮助程序员提高核心竞争力的30条建议

错误处理在开发过程中至关重要,好的错误处理可以使程序更加健壮。而且将错误信息清晰地记录日志,在排查问题时非常有用。Go 中使用error类型进行错误处理,还可以在此基础上自定义错误类型。使用defer语句进行延迟调用,用来关闭或释放资源。使用panic和recover来抛出错误和恢复。使用panic一般有两种情况:程序遇到无法执行的错误时,主动调用panic结束运行;在调试程序时,主动调用panic结束运行,根据抛出的错误信息来定位问题。

2401_84931568的博客 1148

Go语言学习之 panic 和 recover

panic 和 recover

As_wind_的博客 382

Go语言学习16-特殊流程控制

Go语言流程控制方法(defer ,error , panic , recover)

Huazie 1568

Go Quiz: 从Go面试题看recover注意事项第1篇

面试题 这是Go Quiz系列里关于recover的第1篇,主要考察recover函数在什么情况下可以捕获到panic。 func main() {  fmt.Print("1 ")  defer recover()  fmt.Print("2 ")  var a []int  _ = a[0]  f

perfume 290

go 语言学习 23 异常处理 defer panic recover

程序有时候会出现意外,导致奔溃,在java,或php中有 try{}cache(Exception e){} 来捕捉异常,但是在go中没有 ,所以 。。。 如果下面的y 为0时,就出现了异常,导致程序中断,无法继续执行。 package main import "fmt" func main() { fmt.Println(fn1(10, 0)) fmt.Println("下一个程序") fmt.Println(fn1(8, 3)) } func fn1(x int, y int) int.

xxpxxpoo8的专栏 179

听说,99% 的 Go 程序员都被 defer 坑过(1),震撼发布

那么,为了避免写出这么令人意外的代码,最好在定义函数时就不要使用命名返回值。但可以看到,这三个函数都有一个共同特点,它们都有一个命名返回值,并且都在函数中引用了这个返回值。(img-iSFqRNzs-1713020674356)](img-caiL7Cf3-1713020674356)](img-cVoAayfI-1713020674358)](img-i4TdMtcj-1713020674358)]说实话刚开始看到这个结果时,我是相当费解,完全不知道怎么回事。fmt.Println(“继续执行”)

2401_84265519的博客 904

Go 语言学习笔记(二):函数

函数是程序执行的一个基本语法结构,Go 语言的很多特性是基于函数这个基础实现的,比如命名类型的方法本质上是一个函数,类型方法是 Go 面向对象的实现基础;接口的底层同样是通过指针和函数将接口和接口实例连接起来的。甚至 Go 并发语法糖 go 后面跟的也是函数。

Tyler_Zx的博客 2519

go语言学习第三天==>函数、匿名函数与闭包、错误处理、defer关键字、painc()和recover()、type关键字

- go语言学习第三天 ////////////////////////////////////////////////////// - 函数 func   函数名 (参数表)  (返回值表)/返回值  {函数体} demo func example1(x int) int { if x == 0 { return 5 } else{ ...

KongYu01的博客 399
上一篇: Go语言学习笔记 --- function
下一篇: Go语言学习笔记 --- struct
Wang's Blog
博客等级 码龄12年 7438粉丝 2422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值