Golang は現在最も人気のあるプログラミング言語の 1 つであり、サーバー アプリケーションを含むさまざまなアプリケーションの開発に使用できます。この記事では、golang を使用してサービスを開始および停止するコードを記述する方法を紹介します。
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
メソッドも定義します。
サービスを開始するには、NewMyService
関数を使用してサービス インスタンスを作成し、 Run
メソッド 以上です:
svc := NewMyService("8080") err := svc.Run() if err != nil { fmt.Printf("Failed to start service: %s", err) return }
このコードは、svc
という名前の新しいサービス インスタンスを作成し、ポート 8080 でリッスンするように構成します。次に、Run
メソッドを呼び出してサービスを開始します。起動に失敗した場合は、コンソールにエラー メッセージが出力されます。
2. サービスの停止
サービスの停止は、正常なシャットダウンのプロセスを処理する必要があるため、サービスの開始よりも少し複雑です。正常なシャットダウンでは、サーバーはシャットダウンする前に進行中のリクエストをすべて完了します。以下は正常なシャットダウンを実現する方法です。
まず、シャットダウン チャネルを 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 メソッドを変更する必要があります。このメソッドではゴルーチンを使用してチャネルを閉じることをリッスンし、チャネルがシグナルを受信した場合は、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() }
このメソッドは、http.Server が処理中のリクエストを完了するのに十分な時間を確保できるように TimeoutContext を定義します。次に、http.Server の Shutdown メソッドを呼び出して、実行中のサーバーを停止します。最後に、ゴルーチン内のパイプをリッスンし、シャットダウン通知を待ち、その通知を使用して正常なシャットダウンを実行します。
メソッドを呼び出して Ctrl キーを押すだけです。 -c またはその他の終了シグナル: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>svc := NewMyService("8080")
err := svc.Run()
if err != nil {
fmt.Printf("Failed to start service: %s", err)
return
}
// wait for shutdown signal</pre><div class="contentsignin">ログイン後にコピー</div></div>ここでは、サービス インスタンスを作成し、その Run<p> メソッドを呼び出します。次に、ctrl-c またはその他の終了信号を待つだけです。 <code>
概要
この記事では、golang を使用してサービスを開始および停止するコードを記述し、アプリケーションに安定した正常なシャットダウン エクスペリエンスを提供する方法を学びました。 Web サービス、RESTful API、またはその他の種類のサービスを作成する場合、これらのテクノロジはアプリケーションの信頼性と安定性にプラスの影響を与えます。
以上がgolang サービスの開始と停止の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。