Go 言語の Web 開発フレームワーク Gin を使用して開発する場合、ポート リソースの解放やその他の操作を実行するために、Gin サービスを手動で閉じる必要がある場合があります。この記事では、Gin サービスを正しくシャットダウンする方法について説明します。
Gin のデフォルトの起動方法
Gin を使用する場合、通常は次のコードを使用して http サービスを開始します:
router := gin.Default() router.GET("/", func(c *gin.Context) { c.String(http.StatusOK, "Hello, Gin!") }) router.Run(":8080")
このサンプル コードは、デフォルトの Gin ルーター、Handles GET を起動します。 /
パスをリクエストし、文字列を返します。最後に、Run
メソッドを呼び出して、Gin サービスを開始し、ポート 8080 をリッスンします。
Run
メソッドは、ポートを継続的に監視し、要求と応答を処理できるように、常にメイン スレッドを占有するブロッキング呼び出しであることに注意してください。したがって、Gin サービスを手動でシャットダウンする必要がある場合は、非ブロッキング方式を使用してサービスを開始する必要があります。
Use http.Server
Gin を開始する
Gin サービスを手動でシャットダウンするには、Go の組み込み http.Server## を使用する必要があります。 #、http サービスを正常にシャットダウンできる
Shutdown メソッドを提供します。
http.Server を使用して Jin を起動するには、次の手順に従う必要があります。
インスタンスを作成し、リスナーのアドレスとジン ルーターをプロセッサとして設定します。
s := &http.Server{ Addr: ":8080", Handler: router, }
の
ListenAndServe メソッドが呼び出されるゴルーチンを開始します。 、Gin サービスを非同期的に開始します:
go func() { if err := s.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("listen: %s\n", err) } }()
の
Shutdown メソッドを呼び出します。正常にシャットダウンできることを確認するため サービス:
if err := s.Shutdown(context.Background()); err != nil { log.Fatal("Server forced to shutdown:", err) }
package main import ( "context" "log" "net/http" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.GET("/", func(c *gin.Context) { c.String(http.StatusOK, "Hello, Gin!") }) s := &http.Server{ Addr: ":8080", Handler: router, } go func() { if err := s.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("listen: %s\n", err) } }() // 假设需要在 5 秒后关闭服务 <-time.After(5 * time.Second) if err := s.Shutdown(context.Background()); err != nil { log.Fatal("Server forced to shutdown:", err) } log.Println("Server shutdown gracefully") }上記のコードは、Gin ルーターをハンドラーとして
http.Server# に渡します。 ##、ListenAndServe
メソッドを使用して、Gin サービスを開始します。次に、ゴルーチンで http サービスを非同期に実行して、メインスレッドがブロックされていないことを確認します。最後に、メイン スレッドで 5 秒待ってから、Shutdown
メソッドを呼び出して、Gin サービスを正常にシャットダウンし、ログを出力します。 概要
この記事では、Gin サービスを正しくシャットダウンする方法を紹介します。Go の組み込み
http.Server を使用すると、http サービスを正常にシャットダウンし、問題を回避できます。突然のサービス停止の可能性、リソースの漏洩などの問題が発生する可能性があります。 もちろん、上記のコードは単なるサンプル コードであり、運用環境で直接使用することはお勧めできません。コードを参照する際には、実際の状況やニーズに応じて適切に修正、最適化する必要があります。
以上がGo で Jin サービスを適切にシャットダウンする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。