怎么阻止一个Go程序退出?

💡 原文中文,约2700字,阅读约需7分钟。
📝

内容提要

本文分享了11种阻止Go程序退出的方法,包括死循环、select{}、从channel中读写数据、互斥锁、WaitGroup、阻塞I/O、使用signal.Notify等。

🎯

关键要点

  • 本文分享了11种阻止Go程序退出的方法。
  • 方法一:死循环,会耗费一个CPU核空转。
  • 方法二:使用不带case的select语句。
  • 方法三:从一个不带缓存的channel中读数据或放数据,会被阻塞。
  • 方法四:从一个nil channel中读数据或放数据,也会被阻塞。
  • 方法五:使用互斥锁,读写锁也类似。
  • 方法六:使用WaitGroup,很多同步原语都可以。
  • 方法七:使用阻塞I/O,如os.Stdin。
  • 方法八:使用signal.Notify捕获os.Signal,实现优雅退出。
  • 方法九:使用signal.Notify的变形,结合Context。
  • 方法十:使用fmt.Scanln(),阻塞I/O更简洁的方式。
  • 方法十一:使用runtime.Goexit(),主程序退出但函数不返回。
➡️

继续阅读