golang 日志打印后程序直接退出

golang 日志打印后程序直接退出,第1张

在一段 http get 的程序中,如果出现错误,打印日志后会导致程序退出。

将 log.Fatal 修改为 log.Println 即可解决问题。

感觉一个函数做了本不该它做的事情,有些好奇,golang 设计者的设计哲学。

1、goroutine:在go语言中,每一个并发的执行单元叫做goroutine,如果一个程序中包含多个goroutine,对两个函数的调用则可能发生在同一时刻

2、main goroutine:当一个程序启动时,其主函数即在一个单独的goroutine中运行,我们叫他为main gorountine

3、go goroutine:新的goroutine会用go语句来创建,go+函数名,go语句会使其语句中的函数在一新创建的goroutine中运行,而go语句本身会迅速地完成

4、goroutine的退出:主函数返回时,所有的goroutine都会被直接打断,程序退出,除了从主函数退出或者终止程序之外,没有其他方法能够让一个goroutine来打断另一个的执行,但是可以通过另一种方式来实现这个目的,通过goroutine之间的通信来让一个goroutine请求其他的goroutine,并让请求的goroutine自行结束执行

异常都是靠recover捕捉来恢复的

正常退出的监听, os/signal, 请。

以下只是对于 ctrl + c 的信号捕捉示例

package main

import (

"fmt"

"os"

"os/signal"

)

func main() {

c := make(chan os.Signal)

signal.Notify(c)

//signal.Notify(c, syscall.SIGHUP, syscall.SIGUSR2) //监听指定信号

s := <-c //阻塞直至有信号传入

fmt.Println("get signal:", s)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11775950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存