在golang中停止api调用上的Echo服务器



我是Golang和Echo框架的新手。我已经使用如下所示的代码启动了一个服务器,并希望在API命中/stopServer时停止服务器。谷歌让我更加困惑,因为我无法在API上找到这一点。我所能看到的只是在终端中断时停止服务器。任何指针都是可观的。

func stopServer(c echo.Context) error {
//Some code which I am not sure about
}
func main() {
// Echo instance
e := echo.New()
e.GET("/stopServer", stopServer)
// Start server
e.Logger.Fatal(e.Start(":1323"))
}

我还想在http://localhost:1323/stopServer上打印消息,上面写着"Server stopped successfully"

您可以按照Graceful Shutdown Recipe源代码进行操作。

echo优雅关闭配方

更多选项

并参考以下代码片段

package main
import (
"context"
"github.com/labstack/echo/v4"
"net/http"
)
func stopServer(c echo.Context) error {
err := c.Echo().Shutdown(context.Background())
if err != nil {
if err != http.ErrServerClosed {
c.Echo().Logger.Fatal("shutting down the server")
}
}
return nil
}
func main() {
e := echo.New()
e.GET("/stopServer", stopServer)
e.Logger.Fatal(e.Start(":1323"))
}

然而,这将立即关闭回声服务器;ERR_CONNECTION_REFUSED";返回给客户端。

关于err := c.Echo().Shutdown(context.Background())的答案是正确的。我唯一可以添加的是recover(),而不是应用程序死机。类似这样的东西:

func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("host finished")
}
}()
e := echo.New()
e.GET("/stopServer", stopServer)
e.Logger.Fatal(e.Start(":1323"))
}

最新更新