Testing 如何在Go中查看或测试优雅重启?
我发球结束。我想看看与基本HTTP服务器的区别 我已发送带有以下内容的Testing 如何在Go中查看或测试优雅重启?,testing,go,go-graceful,Testing,Go,Go Graceful,我发球结束。我想看看与基本HTTP服务器的区别 我已发送带有以下内容的syscall.SIGUSR1信号: syscall.Kill(getPid(), syscall.SIGUSR1) 应用程序没有退出,但我无法检测到重新启动 我要做的是在toml配置文件更改时初始化应用程序的新配置 我的代码如下: package main import ( "os" "fmt" "syscall" "github.com/gin-gonic/gin" "gith
syscall.SIGUSR1
信号:
syscall.Kill(getPid(), syscall.SIGUSR1)
应用程序没有退出,但我无法检测到重新启动
我要做的是在toml配置文件更改时初始化应用程序的新配置
我的代码如下:
package main
import (
"os"
"fmt"
"syscall"
"github.com/gin-gonic/gin"
"github.com/fvbock/endless"
"github.com/BurntSushi/toml"
)
type Config struct {
Age int
Cats []string
}
var cfg Config
func restart(c *gin.Context) {
syscall.Kill(os.Getpid(), syscall.SIGUSR1)
}
func init() {
toml.DecodeFile("config.toml", &cfg)
fmt.Println("Testing", cfg)
}
func main() {
router := gin.New()
router.GET("/restart", restart)
if err := endless.ListenAndServe("localhost:7777", router); err != nil {
panic(err)
}
}
当我点击重启端点时,我希望打印出toml配置。根据问题的更改更新答案。无休止的库允许您在默认情况下处理该信号。你需要注册一个钩子。我已经在下面扩展了您的示例代码:
package main
import (
"os"
"fmt"
"syscall"
"github.com/gin-gonic/gin"
"github.com/fvbock/endless"
"github.com/BurntSushi/toml"
)
type Config struct {
Age int
Cats []string
}
var cfg Config
func restart(c *gin.Context) {
syscall.Kill(os.Getpid(), syscall.SIGUSR1)
}
func readConfig() {
toml.DecodeFile("config.toml", &cfg)
fmt.Println("Testing", cfg)
}
func main() {
readConfig()
router := gin.New()
router.GET("/restart", restart)
srv := endless.NewServer("localhost:7777", router)
srv.SignalHooks[endless.PRE_SIGNAL][syscall.SIGUSR1] = append(
srv.SignalHooks[endless.PRE_SIGNAL][syscall.SIGUSR1],
readConfig)
if err := srv.ListenAndServe(); err != nil {
panic(err)
}
}
现在,当您调用重新启动端点时,您应该看到在stdout中引用的对配置文件的更改。但是,为了查看文件中的更改,您需要使用类似于谢谢您的回答的内容,但我认为我无法正确判断。我现在用密码输入一个新帖子。你太棒了。非常感谢你。动态更改的配置变量:)。我已经使用fsnotify来查看文件。谢谢