首页 > 其他分享 >golang异常处理trycatch,确保系统不崩溃

golang异常处理trycatch,确保系统不崩溃

时间:2024-11-11 08:46:21浏览次数:1  
标签:test1 test0 Caught golang tryCatch func trycatch 崩溃 panic

package main
import (     "fmt"     "os"     "os/signal"     "syscall" )
func test0() {     defer func() {         if r := recover(); r != nil { // 捕获 panic             fmt.Printf("Caught in tryCatch: %v\n", r)         }     }()
    panic("test0") }
func test1() {     panic("test1") }
func test2() {     panic("test2") }
func test3() {     tryCatch(func() {         test1()     }) }
// tryCatch 封装了 panic 恢复机制 func tryCatch(fn func()) {     defer func() {         if r := recover(); r != nil { // 捕获 panic             fmt.Printf("Caught in tryCatch: %v\n", r)         }     }()     fn() // 执行传入的函数 }
func main() {     // 默认的处理方式     test0()
    // 封装后
    // 模拟在外部catch     tryCatch(func() {         test1()     })     // go tryCatch(func() {     //  test2()     // })
    // 模拟在内部catch     test3()
    // 模拟方法内异常捕获,一个有异常,跳到catch     tryCatch(func() {         test1()         test2()         test3()     })
    // 输出结果     // Caught in tryCatch: test0     // Caught in tryCatch: test1     // Caught in tryCatch: test1     // Caught in tryCatch: test1
    // 监听操作系统信号,阻塞直到接收到信号     quit := make(chan os.Signal, 1)     signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)     <-quit }

标签:test1,test0,Caught,golang,tryCatch,func,trycatch,崩溃,panic
From: https://www.cnblogs.com/chen1880/p/18539012

相关文章

  • GoLang协程Goroutiney原理与GMP模型详解
    本文原文地址:GoLang协程Goroutiney原理与GMP模型详解什么是goroutineGoroutine是Go语言中的一种轻量级线程,也成为协程,由Go运行时管理。它是Go语言并发编程的核心概念之一。Goroutine的设计使得在Go中实现并发编程变得非常简单和高效。以下是一些关于Goroutine的关键特性:轻量......
  • golang 参数传递问题
    golang的参数传递packagemainimport"fmt"/*值传递:函数收到的是参数的副本,修改不影响原本引用传递:函数收到的是参数的地址,修改会影响原本go中的值传递有:基本的数据类型,数组引用传递:切片以及指针*/funcchange(nums[3]int){ nums[0]=1}funcchange1(nu......
  • golang 数组切片
    golang基础数组+切片packagemainimport( "fmt")//数组切片学习funcmain(){ //数组的初始化方式 nums1:=[3]int{1,2,3}//指定长度,全部初始化 fmt.Println("nums1:",nums1) nums2:=[5]int{1,2,3}//指定长度,部分初始化 fmt.Println("nums2:",nums2)......
  • golang oom监控实现
    packagemainimport( "bytes" "fmt" "io/ioutil" "os" "golang.org/x/sys/unix")funcmain(){ varevents[128]unix.EpollEvent varbuf[8]byte //unix.EFD_CLOEXEC确保在exec调用时关闭efd,它可以防止文件描述符在不需......
  • Jetson AGX Orin平台相机驱动r35.4.1升级到r35.5.0版本,vi无数据导致内核崩溃问题【有
    1.问题描述在r35.4.1中的驱动程序中相机采集正常;升级到r35.5.0没有问题后,当使用v4l2-ctl命令打印帧速率时,当没有连接传感器或传感器没有启动流时,在dmesg中发生以下错误:[1432.454398]tegra-camrtc-capture-vitegra-capture-vi:uncorr_err:requesttimedoutafter250......
  • golang 实现比特币内核:椭圆曲线有限域的代码实现
    让我们开始有限域的代码之旅,进入一个空目录,创建一个名为bitcoin的新文件夹,在bitcoin目录中,再创建一个名为elliptic-curve的新文件夹。在该文件夹中初始化一个新的包,运行以下命令:goinitmodelliptic_curve然后我们创建一个新文件finite-element,我们将在这里编写有限域......
  • golang占位符%v、%+v、%#v详解
    目录%v%+v%#v在Go语言中,fmt包提供了格式化字符串的功能,类似于C语言的printf函数。fmt包中的%v、%+v和%#v是用于格式化输出的占位符,它们各自有不同的用途。%v含义:%v表示以默认格式(值)输出变量。对于基本类型如整数、浮点数等,它会直接输出其值;对于结构体,它会输出......
  • Golang channel底层原理
    1原理默认情况下,读写未就绪的channel(读没有数据的channel,或者写缓冲区已满的channel)时,协程会被阻塞。但是当读写channel操作和select搭配使用时,即使channel未就绪,也可以执行其它分支,当前协程不会被阻塞。ch:=make(chanint)select{case<-ch:default:}本文......
  • Golang new() make var []int 使用的具体区别
    一、数组和切片的初始化1var []int 格式funcmain(){ vart1[]int t1=append(t1,1) fmt.Println(t1)//正常输出1 vart11[]int t11[0]=11//panic:runtimeerror:indexoutofrange[0]withlength0 fmt.Println(t11) vart12[1]int t12[0]=......
  • 如何使用Ida Pro和Core Dump文件定位崩溃位置(Linux下无调试符号的进程专享)
    我们在嵌入式Linux开发过程中经常会遇到一个问题,就是程序崩溃后不知道具体位置。因为我们发布到生产环境的一般是没有调试符号的(使用strip或编译时加-s参数,CMake生成的编译指令中的-O3也会造成调试符号丢失),毕竟嵌入式的存储都比较有限,肯定是需要剥离调试符号的。另外一个......