一段用于 gin gracefully shutdown 的代码在使用 govet 检查时,报 error 错误。 但是,这个错误在编译时,并不会报错,不影响编译,我就一直没管。
然而这个炎热的夏天,我实在忍不住了,今天在 VIM 中看到底部这个一直显示的,无法消除的 govet 错误,心情暴躁的我决定毁灭它。
报错信息
[govet] misuse of unbuffered os.Signal channel as argument to signal.Notify [Error]
报错代码
// Wait for interrupt signal to gracefully shutdown the server with
// a timeout of 5 seconds.
quit := make(chan os.Signal)
// kill (no param) default send syscanll.SIGTERM
// kill -2 is syscall.SIGINT
// kill -9 is syscall. SIGKILL but can"t be catch, so don't need add it
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("Shutdown Server ...")
具体报错行在 signal.Notify 这行。
参考:
https://pkg.go.dev/os/signal#Notify
package main
import (
"fmt"
"os"
"os/signal"
)
func main() {
// Set up channel on which to send signal notifications.
// We must use a buffered channel or risk missing the signal
// if we're not ready to receive when the signal is sent.
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
// Block until a signal is received.
s := <-c
fmt.Println("Got signal:", s)
}
解决方法
修改为:
quit := make(chan os.Signal, 1)
然后,世界清净了。
golang 版本
go.mod
go 1.18
go 版本:
> go version
go version go1.18 linux/amd64
参考
- https://github.com/edgexfoundry/go-mod-bootstrap/issues/300
- https://blog.csdn.net/zkt286468541/article/details/126016095
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式