首页 > 其他分享 >golang使用小技巧

golang使用小技巧

时间:2023-05-24 12:31:49浏览次数:40  
标签:24 ---- 技巧 time golang 2023 func 使用 panic

封装gorouting并捕捉panic

从k8s源码中学到的,觉得小而精,感觉比定时器好用呢

k8s源码中是这样使用的

golang使用小技巧_recover

// 每隔peroid后就执行传入的函数
func Forever(f func(), period time.Duration) {
	for {
		func() {
			defer HandleCrash() // 捕捉函数中的panic
			f()
		}()
		time.Sleep(period)
	}
}

// 捕捉函数中的panic
func HandleCrash() {
	r := recover()
	if r != nil {
		fmt.Printf("Recovered from panic: %#v", r)
	}
}

// 测试函数
func test() {
	fmt.Println("我开始执行了----", time.Now())
	a := []int{1, 2}
	fmt.Println(a[10])
}

func main() {
	go Forever(test, 5*time.Second) // 测试执行
	select {} // 阻塞主 gorouting
}

// 打印效果
我开始执行了---- 2023-05-24 12:20:48.178207 +0800 CST m=+0.000109710
我开始执行了---- 2023-05-24 12:20:53.18062 +0800 CST m=+5.002540710
我开始执行了---- 2023-05-24 12:20:58.181879 +0800 CST m=+10.003818293

标签:24,----,技巧,time,golang,2023,func,使用,panic
From: https://blog.51cto.com/landandan/6338534

相关文章

  • 如何在 Linux 中安装和使用 duf 命令
    导读今天我们来分享一下如何在 Linux 中安装和使用duf 命令。该命令显示磁盘空间的利用率,显示方式如下图所示:​duf命令是du命令和​​​df命令​​​​的一个结合,且结果输出是以更加易读的结构化方式,来检查系统空间。其显示跟易读,对不?今天我们来分享一下如何......
  • windows环境下的vue部署(使用nginx)
    首先需要将vue项目打包成dist,在需要部署的服务器上进行解压然后我们使用nginx进行反向代理设置,具体操作如下打开解压后的nginx,进入目录:nginx-1.23.4->conf,打开编辑nginx.conf*注意:对于后端路径的映射这里一定是^~/前缀/对应于地址的端口/前缀/,这里一定是两个//包裹。以下......
  • dtcloud报错时,排错小技巧
    一、Dtcloud控制台error日志一般为以下格式Traceback(mostrecentcalllast):出错的文件调用列表......error类型(XXERROR):error详细信息(原因)二、阅读错误日志首先要阅读的是error详细信息。然后根据error类型、信息采取相应的修复工作。三、常见修复技巧......
  • flask框架使用unittest单元测试
    user_labels_api.py1#-*-coding:utf-8-*-2#Author:Ethan3#Time:2023/5/1612:504fromflaskimportFlask,jsonify,render_template,request,json5importrequests6#fromflask_sqlalchemyimportSQLAlchemy7app=Flask(__name__)8#bd......
  • SpringBoot中使用枚举类、switch、常量类(声明并初始化map)实现类策略者模式,接口返回
    场景SpringBoot中策略模式+工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130503707SpringBoot+@Validate+全局异常拦截实现自定义规则参数校验(校验get请求参数不能为空且在指定......
  • 使用QtCreator C++编写串口调试助手
    Qt小白一枚,喜欢嵌入式应用,以前都是使用别人的串口调试助手,学习了C++以后,自己也尝试着做了简单的串口调试助手,分享给大家吧,希望能帮助到大家,如果有错误,请大家指正。话不多说开干!1.首先看一下我设计的界面(我这里比较简单,大家可根据自己的需求进行设计)(界面设计的过程中,每一个控件......
  • python运行使用pywin32下载及安装问题
     1、python执行报错File"F:\XXX\XXX.py",line7,in<module> 运行python程序,提示错误如下:importwin32gui ModuleNotFoundError:Nomodulenamed'win32gui'该报错信息表示在F:\XXX\XXX.py中的第7行引入了win32gui,但是当前设备缺少pywin32的模块,需要安装安装方式一:直......
  • Jupyter Notebook 10个提升体验的高级技巧
    Jupyter笔记本是数据科学家和分析师用于交互式计算、数据可视化和协作的工具。Jupyter笔记本的基本功能大家都已经很熟悉了,但还有一些鲜为人知的技巧可以大大提高生产力和效率。在这篇文章中,我将介绍10个可以提升体验的高级技巧。完整文章:https://avoid.overfit.cn/post/519c......
  • vue中<script setup>中使用watch、computed、props、defineExpose、defineEmits等方法
    <scriptsetup>是在单文件组件(SFC)中使用组合式API的编译时语法糖。相比于普通的<script>语法,它具有更多优势:更少的样板内容,更简洁的代码。能够使用纯TypeScript声明props和抛出事件。更好的运行时性能(其模板会被编译成与其同一作用域的渲染函数,没有任何的中间......
  • 你见过哪些优雅的 java代码优化技巧
    今天分享一些实用的有助于提高代码质量的建议,建议收藏!避免炫技式单行代码代码没必要一味追求“短”,是否易于阅读和维护也非常重要。像炫技式的单行代码就非常难以理解、排查和修改起来都比较麻烦且耗时。反例:if(response.getData()!=null&&CollectionUtils.isNotEmpty(respons......