当前位置: 首页 > 面试题库 >

调用log.Fatalln时是否调用了延迟函数?

陆展
2023-03-14
问题内容
db, err := sql.Open("postgres", "…")
if err != nil {
    log.Fatalln(err)
}
defer db.Close()

tpl, err := template.ParseGlob("")
if err != nil {
    log.Fatalln(err)
}

如果template.ParseGlob("")返回错误,是否db.Close()仍在调用?


问题答案:

不,延迟功能不会运行。

这是log.Fatal的描述:

致命等同于Print(),然后调用os.Exit(1)。

log.Fatal呼叫os.Exit,其描述在这里:

退出使当前程序以给定的状态码退出。按照惯例,代码零表示成功,代码零表示错误。程序立即终止;延迟功能未运行。

示范

如果您确实需要在程序完成之前正确关闭资源或执行某些任务,请不要使用log.Fatal



 类似资料:
  • 问题内容: 对于以下代码段,当收到^ C时,不会进行延迟呼叫。清理是否可能引入竞争条件?如果是,那么在收到中断时有什么更好的清除方式? 问题答案: 请注意,如果使用来“安装”信号通道,则默认行为将被禁用。这意味着如果您这样做,函数中的循环将不会中断,它将继续运行。 因此,当您在注册的频道上收到一个值时,必须使该循环终止,以便进行“清除”清除。否则,应该释放的资源可能仍在使用中,很可能导致错误或死机

  • 延迟调用一个函数,直到当前调用堆栈已经清除。 使用 setTimeout() ,超时时间为1ms,将新事件添加到浏览器事件队列,并允许渲染引擎完成其工作。使用展开 (...) 运算符为函数提供任意数量的参数。 const defer = (fn, ...args) => setTimeout(fn, 1, ...args); // Example A: defer(console.log, 'a

  • Go 语言中没有提供其它面向对象语言的析构函数,但是 Go 语言提供了 defer 语句用于实现其它面向对象语言析构函数的功能 defer 语句常用于 释放资源、解除锁定 以及 错误处理 等 例如C语言中我们申请了一块内存空间,那么不使用时我们就必须释放这块存储空间 例如C语言中我们打开了一个文件,那么我们不使用时就要关闭这个文件 例如C语言中我们打开了一个数据库, 那么我们不使用时就要关闭这个数

  • 我想在一个HTML页面上做一个值,每5秒更新一次,这样就不会让服务器不堪重负。结果表明,我的函数中的setTimeout()没有适当延迟,而是立即被调用。有人能帮我找个线索吗?我真的不想给我的服务器太多的工作,因为我必须实现更多的Ajax。 代码如下:

  • 我有以下型号: 在另一个图书馆服务的方法: 只有在启用延迟加载时,它才能正常工作: 如果未启用延迟加载,则不填充用户属性。我想抛出一个异常,如果有人试图使用我的服务没有启用延迟加载。怎么做呢?我试图检查属性

  • 我正在使用Mika Tuupola的jQuery延迟加载。 是否可以在每次延迟加载图像后调用函数。 我打算做的是跟踪图像的浏览次数。因此,如果图像是延迟加载的,这意味着用户已经看到了图像,我将通过在后台执行HTTP GET,将数据库中的计数器增加1。