golang windows 运行 github.com/fvbock/endless 库报错 undefined: syscall.SIGUSR1

平凡
03-08 11:39
204 阅读

gin 采用 github.com/fvbock/endless 做平滑重启方案,在 windows 下运行会报 undefined: syscall.SIGUSR1 等错误

go 服务代码如下

package main

import (
	"blog/bootstrap"
	"blog/config"
	"fmt"
	"github.com/fvbock/endless"
	"github.com/gin-gonic/gin"
	"log"
	"time"
)

func main() {
	if config.App.Env != "local" {
		gin.SetMode(gin.ReleaseMode)
	}

	// 初始化日志
	bootstrap.SetupLogger()
	// 初始化数据库
	bootstrap.SetupDatabase()
	// 初始化 Redis
	bootstrap.SetupRedis()
	// 初始化雪花ID
	bootstrap.SetupSnowflake()
	// 初始化事件
	bootstrap.SetupEvent()
	// 运行 websocket 服务
	bootstrap.SetupWebsocket()
	// 定时任务
	cron := bootstrap.SetupCron()

	// 初始化路由
	router := bootstrap.SetupRouter()

	endless.DefaultHammerTime = 1 * time.Second
	if err := endless.ListenAndServe(fmt.Sprintf(":%s", config.App.Port), router); err != nil {
		log.Fatalf("listen: %s\n", err)
	}

	if cron != nil {
		cron.Stop()
	}
}

运行服务

go run main.go

报错信息

WX20240308-113152.png

这是因为 win 下没有 syscall.SIGUSR1 syscall.SIGUSR2 syscall.SIGTSTP 这几个常量。

解决办法

修改 Go\src\syscall\types_windows.go 文件

var signals = [...]string{
    ...
    16: "SIGUSR1",
    17: "SIGUSR2",
    18: "SIGTSTP",
}

func Kill(...interface{}) {
    return;
}

const (
    SIGUSR1 = Signal(0x10)
    SIGUSR2 = Signal(0x11)
    SIGTSTP = Signal(0x12)
)
0 评论
暂无数据