返回顶部
首页 > 资讯 > 精选 >为什么 docall 在 singleflight 中使用 gopanic?
  • 247
分享到

为什么 docall 在 singleflight 中使用 gopanic?

并发请求 2024-02-08 22:02:37 247人浏览 薄情痞子
摘要

PHP小编香蕉为您解答:为什么docall在singleflight中使用Gopanic?在singleflight中,当多个goroutine同时请求相同的任务时,为了避免重复执行,

PHP小编香蕉为您解答:为什么docall在singleflight中使用Gopanic?在singleflight中,当多个goroutine同时请求相同的任务时,为了避免重复执行,我们需要使用docall函数来确保只有一个goroutine执行任务。而为了在某个goroutine发生错误时能够更好地进行错误处理,我们使用gopanic函数来抛出异常。这样可以使得错误更加明确,便于我们进行相应的处理和调试。因此,在singleflight中使用gopanic可以提高错误处理的可靠性和效率。这是为什么docall在singleflight中使用gopanic的原因。

问题内容

我最近在读singleflight源代码,对第158行感到困惑。

if len(c.chans) > 0 {
    go panic(e)
    select {} // Keep this goroutine around so that it will appear in the crash dump.
} else {
    panic(e)
}

为什么在使用channel时使用gopanic而不是直接panic?第129行使用go docall,在这个方法中panic,上层无法恢复,所以go panic应该没有意义了吧?

此外,如果有并发请求,panic后通道仍然没有写入,其他goroutine不也会阻塞吗?如果有好心人阅读并解答,非常感激~

了解设计含义

解决方法

gopanic 将导致无法恢复的恐慌。恐慌和 select 之后确保恐慌的 goroutine 出现在堆栈转储中,因此您可以查看堆栈转储并意识到发生了不应该发生的情况。

这只是确保您不会无意中从不应恢复的内容中恢复的一种方法。

以上就是为什么 docall 在 singleflight 中使用 gopanic?的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 为什么 docall 在 singleflight 中使用 gopanic?

本文链接: https://lsjlt.com/news/562113.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 为什么 docall 在 singleflight 中使用 gopanic?
    php小编香蕉为您解答:为什么docall在singleflight中使用gopanic?在singleflight中,当多个goroutine同时请求相同的任务时,为了避免重复执行,...
    99+
    2024-02-08
    并发请求
  • 为什么在Python中使用Git?
    Python 和 Git 都是现代软件开发中不可或缺的工具。Python 是一种流行的编程语言,而 Git 是一种版本控制系统。在 Python 中使用 Git 可以帮助开发者更好地管理代码,并与其他开发者协作。本文将介绍为什么在 Pyth...
    99+
    2023-09-30
    path shell git
  • 为什么要在Ruby APP中使用Neo4j
    为什么要在Ruby APP中使用Neo4j,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。每天,我都需要储存大量的数据,而我可以使用很多工具,比如 Postgre...
    99+
    2023-06-17
  • 为什么不在Python中使用无用分号
    这篇文章主要介绍“为什么不在Python中使用无用分号”,在日常操作中,相信很多人在为什么不在Python中使用无用分号问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”为什么不在Python中使用无用分号”的疑...
    99+
    2023-06-16
  • 为什么要停止在JavaScript中使用类
    为什么要停止在JavaScript中使用类,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。多年来,OOP(面向对象编程)是软件工程中的事实上的标...
    99+
    2024-04-02
  • 为什么在Vue上使用Nuxt.js
    这篇文章主要讲解了“为什么在Vue上使用Nuxt.js”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么在Vue上使用Nuxt.js”吧!Nuxt.js是...
    99+
    2024-04-02
  • 为什么在MySQL中不建议使用UTF-8
    最近我遇到了一个 bug,我试着通过 Rails 在以“utf8”编码的 MariaDB 中保存一个 UTF-8 字符串,然后出现了一个离奇的错误: Incorrect string value: ‘\xF0\x9...
    99+
    2022-05-16
    MySQL UTF-8
  • 为什么不建议在 MySQL 中使用 UTF-8?
    最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的MariaDB中保存一个UTF-8字符串,然后出现了一个离奇的错误:Incorrect string value:&nb...
    99+
    2024-04-02
  • 为什么要在LeetCode中使用Python的NumPy库?
    近年来,人工智能和机器学习的兴起,让编程语言的选择变得更加重要。在算法和数据结构领域,LeetCode已经成为了一个非常受欢迎的学习平台,许多程序员在这里刷题、学习和交流。而在这个过程中,Python的NumPy库也成为了许多程序员喜爱的选...
    99+
    2023-06-22
    numy leetcode 文件
  • 为什么无法在IDEA中使用Spring-boot-devTools
    本篇文章为大家展示了为什么无法在IDEA中使用Spring-boot-devTools,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。相信大部分使用Intellij的同学都会遇到这个问题,即使项目使用...
    99+
    2023-05-31
    idea spring-boot-devtools
  • 为什么在Java中使用HTTP比使用Shell和NPM更好?
    在现代的软件开发中,HTTP已经成为了一个普遍的协议。Java作为一种流行的编程语言,自然也有许多方法来使用HTTP。但是,为什么在Java中使用HTTP比使用Shell和NPM更好呢?本文将探讨这个问题,并为您展示如何在Java中使用HT...
    99+
    2023-11-12
    shell npm http
  • 在Activity中为什么要用managedQuery()
    在Activity中使用managedQuery()方法是为了在Android 3.0(API级别11)之前的版本中访问Conten...
    99+
    2023-09-01
    Activity
  • 为什么不建议在go项目中使用init()
    前言 go的 init函数给人的感觉怪怪的,我想不明白聪明的 google团队为何要设计出这么一个“鸡肋“的机制。实际编码中,我主张尽量不要使用init函数。 首先来看看 in...
    99+
    2022-06-07
    GO init
  • 为什么在MySQL中几乎不使用分区表
    这篇文章主要介绍“为什么在MySQL中几乎不使用分区表”,在日常操作中,相信很多人在为什么在MySQL中几乎不使用分区表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”为什么在...
    99+
    2024-04-02
  • 为什么wait和notify必须放在synchronized中使用
    目录wait/notify基础使用wait/notify和synchronized一起用?原因分析wait和notify问题复现总结前言: 在多线程编程中,wait 方法是让当前线程...
    99+
    2024-04-02
  • 为什么永远不要在MySQL中使用UTF-8
    这篇文章给大家介绍为什么永远不要在MySQL中使用UTF-8,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的MariaDB中保存一个UTF-8字符串,然后...
    99+
    2023-06-19
  • 为什么要在PHP中使用Laravel容器加载?
    在PHP中使用Laravel容器加载器是一个非常流行的技术。Laravel容器加载器是一个简单而强大的工具,它可以帮助你更好地组织和管理代码。在本文中,我们将介绍为什么要在PHP中使用Laravel容器加载器,并提供一些示例代码。 什么...
    99+
    2023-09-16
    load laravel 容器
  • 为什么要在 PHP shell 中使用缓存路径?
    PHP shell 是 PHP 编程语言的一个交互式环境,它可以让我们在命令行中直接执行 PHP 代码。在实际的开发中,我们经常需要在 PHP shell 中测试一些代码,以验证其正确性或者快速地尝试一些新的语法特性。然而,PHP shel...
    99+
    2023-06-26
    shell 缓存 path
  • 为什么要在 Spring 中使用 Go 索引函数?
    Spring 是一个流行的 Java 开发框架,它提供了丰富的功能和组件,可以帮助开发人员快速开发高质量的应用程序。在 Spring 中,有一个非常实用的功能是 Go 索引函数,本文将深入探讨为什么要在 Spring 中使用 Go 索引函数...
    99+
    2023-10-11
    索引 spring 函数
  • 为什么不要在 Flutter 中使用全局变量
    目录前言Flutter 中的全局变量是什么?Flutter 中使用全局变量的缺点1. 复杂的代码维护过程2. 全局变量使单元测试变得痛苦3. 全局变量导致“面条&rdqu...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作