怎么阻止一个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(),主程序退出但函数不返回。
➡️