首页 > 其他分享 >golang panic和log.Fatal

golang panic和log.Fatal

时间:2023-09-07 15:57:26浏览次数:39  
标签:Fatal run log golang exit main panic

log.Fatal

相当于 Print 后调用 os.Exit(1)

import "log"

func main() {
	defer func() {
		log.Println("main exit")
	}()

	log.Println("main run")
	log.Fatalln("Fatal err")
}

运行结果,程序直接退出 defer 没有被执行

# go run .
2023/09/05 19:20:30 main run
2023/09/05 19:20:30 Fatal err
exit status 1

panic

recover() 可以从panic中恢复

import "log"

func main() {
	defer func() {
		log.Println("main exit")
	}()

	log.Println("main run")
	panic("panic err")
}

执行结果,panic会显示错误堆栈,defer被执行,程序正常退出,可以使用log.Panic记录消息

# go run .
2023/09/05 19:25:59 main run
2023/09/05 19:25:59 main exit
panic: panic err

goroutine 1 [running]:
main.main()
        /mnt/d/ajanuw/go-demo/main.go:11 +0xac
exit status 2

标签:Fatal,run,log,golang,exit,main,panic
From: https://www.cnblogs.com/ajanuw/p/17680627.html

相关文章

  • golang操作mysql
    golang操作mysql在Go语言中,你可以使用第三方库来进行MySQL数据库的操作。其中,比较常用的库有database/sql和github.com/go-sql-driver/mysql在安装了MySQL的前提下进行以下操作1下载依赖在终端执行命令:goget-ugithub.com/go-sql-driver/mysql2导入依赖库import(......
  • 驱动调试_Panic
    原理:是系统时钟中断永不停息,可在系统时钟中断中添加打印信息。系统定时器中断中调试(不可打印寄存器reg)cat/proc/interrupts //可查看系统定时器中断/**IRQhandlerforthetimer*/staticirqreturn_t //linux-2.6.22.6\arch\arm\plat-s3c24xx\time......
  • 浅析Golang的层级时间轮实现方案
    文章目录时间轮介绍简单时间轮层级时间轮kafka中的实现细节基于go语言的层级时间轮实现 一、时间轮介绍工作中,我们经常遇到到延时任务这类需求(例如用户开始一个任务,15分钟后给他发送一个通知奖励;用户下单未付款,三分钟后发送一条提醒消息...)。一般情况下,我们......
  • golang锁浅谈
    在Go语言中,有以下几种常用的锁类型:互斥锁(Mutex)互斥锁是最常用的一种锁机制,用于保护共享资源在并发访问时的互斥操作。常见的用法如下:varmutexsync.Mutex​//通过Lock()和Unlock()方法保护共享资源的临界区mutex.Lock()//执行对共享资源的操作mutex.Unlock()对于syn......
  • Golang匿名函数浅谈
    Go匿名函数(闭包)在Go中,匿名函数(也称为闭包)可以捕获外部变量。Go的闭包是指一个函数值(函数变量)包含了对其外部作用域中变量的引用。匿名函数可以访问和修改其外部作用域中的变量。它可以捕获外部变量的值,并在函数体中使用这些变量。下面是一个示例,展示了如何在匿名函数中捕......
  • golang接口用法浅谈
    类型接口Go不是面向对象的语言,在go里通过不同的结构体实现同一组公共接口这种组合的形式实现多态,类似C++的类和虚函数定义类型接口(InterfaceDefinition):使用type关键字定义接口,指定接口的方法签名。方法签名由方法的名称、参数列表和返回值组成,但不包含方法体。接口......
  • Golang Gorm 一对多查询 preload预加载
    预加载示例GORM允许使用 Preload通过多个SQL中来直接加载关系,例如:typeUserstruct{gorm.ModelUsernamestringOrders[]Order}typeOrderstruct{gorm.ModelUserIDuintPricefloat64}//查找user时预加载相关Orderdb.Preload("Orders").Fin......
  • homebrew安装软件出现git问题fatal: not in a git directory,Error: Command failed w
    homebrew安装软件出现git问题问题fatal:notinagitdirectoryError:Commandfailedwithexit128:git问题查找1.brew-v查看问题logsuyf@suyfdeMac-mini~%brew-vHomebrew4.0.18-18-g64259a4fatal:detecteddubiousownershipinrepositoryat'/op......
  • golang编译go build -ldflags "-s -w"的 解释
    gobuild-ldflags"-s-w" 是一个Go语言的构建命令,其中使用了 -ldflags 参数来传递一些额外的链接器标志。这个命令中,-ldflags"-s-w" 传递了两个标志:-s:该标志会禁止生成可执行文件中的符号表信息,这样在执行文件时就不会暴露源代码中的函数名、变量名等符号信息。这有......
  • golang base64解码
    解码过程1.使用标准库的base64.StdEncoding.DecodeString 最开始是印象标准库有一个base64.StdEncoding.DecodeString方法可以解码,就直接使用了这个方法packagemainimport("encoding/base64""fmt")funcmain(){encrypt:="Cf1WA2nBMo3H9G2UPhlLBBVB......