ホームページ  >  記事  >  バックエンド開発  >  Go で Jin サービスを適切にシャットダウンする方法

Go で Jin サービスを適切にシャットダウンする方法

PHPz
PHPzオリジナル
2023-04-11 09:14:571520ブラウズ

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 を起動するには、次の手順に従う必要があります。

  1. http.Server インスタンスを作成し、リスナーのアドレスとジン ルーターをプロセッサとして設定します。
  2. s := &http.Server{
        Addr:    ":8080",
        Handler: router,
    }
  1. http.ServerListenAndServe メソッドが呼び出されるゴルーチンを開始します。 、Gin サービスを非同期的に開始します:
  2. go func() {
        if err := s.ListenAndServe(); err != nil && err != http.ErrServerClosed {
            log.Fatalf("listen: %s\n", err)
        }
    }()
    Gin サービスをシャットダウンする必要がある場合は、
  1. http.ServerShutdown メソッドを呼び出します。正常にシャットダウンできることを確認するため サービス:
  2. 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。