ホームページ  >  記事  >  バックエンド開発  >  golang サービスの開始と停止

golang サービスの開始と停止

王林
王林オリジナル
2023-05-10 11:37:36979ブラウズ

Golang は現在最も人気のあるプログラミング言語の 1 つであり、サーバー アプリケーションを含むさまざまなアプリケーションの開発に使用できます。この記事では、golang を使用してサービスを開始および停止するコードを記述する方法を紹介します。

1. サービスを開始します

  1. サービスを定義します

まず、サービス構造を定義する必要があります。以下は簡単な例です。

type MyService struct {
    httpServer *http.Server
}

func NewMyService(port string) *MyService {
    return &MyService{
        httpServer: &http.Server{
            Addr: fmt.Sprintf(":%s", port),
        },
    }
}

func (svc *MyService) Run() error {
    return svc.httpServer.ListenAndServe()
}

この例では、http.Server のインスタンスを含む MyService という名前の構造体を定義します。また、MyService 構造のインスタンスを作成する NewMyService 関数も定義します。この関数はポート番号を渡し、それを使用して http.Server の Addr プロパティを構成する必要があります。最後に、http.Server を起動して受信リクエストのリッスンを開始する Run メソッドも定義します。

  1. サービスの開始

サービスを開始するには、NewMyService 関数を使用してサービス インスタンスを作成し、 Run メソッド 以上です:

svc := NewMyService("8080")
err := svc.Run()
if err != nil {
    fmt.Printf("Failed to start service: %s", err)
    return
}

このコードは、svc という名前の新しいサービス インスタンスを作成し、ポート 8080 でリッスンするように構成します。次に、Run メソッドを呼び出してサービスを開始します。起動に失敗した場合は、コンソールにエラー メッセージが出力されます。

2. サービスの停止

サービスの停止は、正常なシャットダウンのプロセスを処理する必要があるため、サービスの開始よりも少し複雑です。正常なシャットダウンでは、サーバーはシャットダウンする前に進行中のリクエストをすべて完了します。以下は正常なシャットダウンを実現する方法です。

  1. サービス定義を変更します

まず、シャットダウン チャネルを MyService に追加する必要があります。構造:

type MyService struct {
    httpServer *http.Server
    stopChan   chan os.Signal
}

この閉じたチャネルは、サーバーにいつ停止するかを通知するために使用されます。また、終了チャネルがサービス インスタンスに追加されるように、NewMyService 関数を変更する必要があります。

func NewMyService(port string) *MyService {
    stopChan := make(chan os.Signal, 1)
    signal.Notify(stopChan, os.Interrupt, syscall.SIGTERM)

    return &MyService{
        httpServer: &http.Server{
            Addr: fmt.Sprintf(":%s", port),
        },
        stopChan: stopChan,
    }
}

ここでは、stopChan という名前のパイプを定義し、# を使用します。 ##signal.Notify 関数を使用して、オペレーティング システムの終了信号 (ctrl-c など) をチャネルに追加します。次に、パイプラインをサービス インスタンスに追加します。

    Run メソッドを変更する
次に、

Run メソッドを変更する必要があります。このメソッドではゴルーチンを使用してチャネルを閉じることをリッスンし、チャネルがシグナルを受信した場合は、http.Server を停止して関数を閉じます。

func (svc *MyService) Run() error {
    go func() {
        <-svc.stopChan
        ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
        defer cancel()
        svc.httpServer.Shutdown(ctx)
    }()

    return svc.httpServer.ListenAndServe()
}

ここでは、## を使用してチャネルを閉じます。 #context.WithTimeout

このメソッドは、http.Server が処理中のリクエストを完了するのに十分な時間を確保できるように TimeoutContext を定義します。次に、http.Server の Shutdown メソッドを呼び出して、実行中のサーバーを停止します。最後に、ゴルーチン内のパイプをリッスンし、シャットダウン通知を待ち、その通知を使用して正常なシャットダウンを実行します。

サービスを停止します
  1. あとは、クライアント コードで新しいサービス インスタンスを作成し、その
Run

メソッドを呼び出して Ctrl キーを押すだけです。 -c またはその他の終了シグナル: <pre class='brush:php;toolbar:false;'>svc := NewMyService(&quot;8080&quot;) err := svc.Run() if err != nil { fmt.Printf(&quot;Failed to start service: %s&quot;, err) return } // wait for shutdown signal</pre>ここでは、サービス インスタンスを作成し、その

Run

メソッドを呼び出します。次に、ctrl-c またはその他の終了信号を待つだけです。 概要

この記事では、golang を使用してサービスを開始および停止するコードを記述し、アプリケーションに安定した正常なシャットダウン エクスペリエンスを提供する方法を学びました。 Web サービス、RESTful API、またはその他の種類のサービスを作成する場合、これらのテクノロジはアプリケーションの信頼性と安定性にプラスの影響を与えます。

以上がgolang サービスの開始と停止の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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