検索
ホームページバックエンド開発Golanggolang のエレガントなシャットダウン方法について話しましょう

golang を開発および使用していると、通常、シャットダウンまたは実行の停止が必要な状況に遭遇します。たとえば、プログラムが終了するか例外が発生した場合は、正常にシャットダウンする必要があります。

正常なシャットダウンはプログラムを停止すると同時に、開始されたタスクの処理を許可し、データ損失やリソース漏洩などの問題を回避し、クライアントに不必要な損失を与えません。この記事では、golang の正常なシャットダウン方法について説明します。

優雅なシャットダウン方法

golang では、セマフォやチャネルを設定することで正常なシャットダウンを実装することができます。具体的な実装方法は次のとおりです。 ## セマフォを介して実装

package main

import (
    "log"
    "os"
    "os/signal"
    "syscall"
    "time"
)

func main() {
    stop := make(chan os.Signal, 1)
    signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM)

    log.Println("Starting...")

    go func() {
        <h3 id="このコードでは-タイプ-os-Signal-および長さ-のシグナル-バッファー-チャネルが-make-によって作成され-シグナル-パッケージの-Notify-関数を通じてオペレーティング-システムに通知されます-監視したい信号は-SIGINT-と-SIGTERM-で-どちらもプログラムのシャットダウン要求を表すことができます">このコードでは、タイプ os.Signal および長さ 1 のシグナル バッファー チャネルが make によって作成され、シグナル パッケージの Notify 関数を通じてオペレーティング システムに通知されます。監視したい信号は SIGINT と SIGTERM で、どちらもプログラムのシャットダウン要求を表すことができます。 </h3><p>次に、Goroutine を開始し、停止チャネルをリッスンします。SIGINT または SIGTERM シグナルが受信されると、Goroutine の実行がトリガーされます。実行プロセス中にシャットダウン ロジックを処理します。ここで Time.Sleep を使用して、時間のかかる操作をシミュレートし、プログラムが正常に終了するかどうかをより適切にテストします。最後に、os.Exit 関数を通じて、プログラムのシャットダウン要求が処理されたことがオペレーティング システムに通知されます。 </p><p>メインの goroutine では、ビジネス ロジックを処理し、毎秒 "Running..." を出力します。これは単なる例です。通常、ビジネス ロジックを処理するときは、定期的に保存する必要があります。データやリリースリソースなど。 </p><p>スルーチャネル</p><pre class="brush:php;toolbar:false">package main

import (
    "log"
    "os"
    "time"
)

func main() {
    done := make(chan bool)

    log.Println("Starting...")

    go func() {
        osSignals := make(chan os.Signal, 1)
        signal.Notify(osSignals, syscall.SIGINT, syscall.SIGTERM)

        select {
        case <h3 id="このコードでは-プログラムが完了したかどうかを示すブール型のdone変数を作成し-メインのゴルーチンでビジネスロジックを処理して定期的に出力します-実行中-と選択機能を使用して完了を聞きます-Done-変数が-true-に設定されている場合-プログラムは終了し-main-関数に戻ってプログラムの終了を完了します">このコードでは、プログラムが完了したかどうかを示すブール型のdone変数を作成し、メインのゴルーチンでビジネスロジックを処理して定期的に出力します。 「実行中...」と選択機能を使用して完了を聞きます。 Done 変数が true に設定されている場合、プログラムは終了し、main 関数に戻ってプログラムの終了を完了します。 </h3><p>別のゴルーチンでは、make を通じて os.Signal 型、長さ 1 のシグナル バッファー チャネルを作成し、シグナル パッケージの Notify 関数を通じて、どのようなシグナルを監視するかをオペレーティング システムに伝えます。そしてSIGTERM。次に、select 関数を使用して osSignals をリッスンし、SIGINT または SIGTERM シグナルを受信すると、特定の操作がトリガーされます。 </p><p>プログラムによって監視される信号</p><h2 id="Linux-システムには-通常-次の信号があります">Linux システムには、通常、次の信号があります。 </h2><p></p>
信号名 ##SIGINTターミナル割り込み文字。通常はコントロール CSIGTERM ## を通じて発行されます。 # 終了信号。通常、プログラムの実行を独自に停止するよう要求するために使用されます。 #SIGHUP 一時停止信号。通常、端末接続が中断されたことを示します。構成ファイルなどを再読み込みする必要があります。##SIGKILLKill 停止したプロセス シグナルをキャッチまたは無視できません。プロセスは暴力的に強制終了することのみ可能です。 SIGSTOP プロセス停止シグナルをキャッチまたは無視できません。プロセスは強制的に停止することしかできません。SIGCONTプロセスの実行を継続しますSIGPIPEパイプ破断信号。通常はデータの読み取りを示します。相手側が接続を閉じました。SIGALRMアラーム クロック信号。定期的に操作をトリガーするために使用されます。#SIGCHLD通常は、SIGINT シグナルと SIGTERM シグナルをリッスンするだけで済みます。 正常なシャットダウンの役割正常なシャットダウンにより、リクエストや操作の失敗によって引き起こされるデータ損失、リソース漏洩、その他の問題を回避できます。サービスを提供する長時間実行されるプログラムやアプリケーションの場合、特に重要です。特に分散システムやマイクロサービス アーキテクチャでは、正常なシャットダウンはシステムの安定性とパフォーマンスを効果的に確保できますが、対象となる問題処理機能がないと、プログラムが勝手に終了したり、停止信号を受信した後にクラッシュを引き起こしたりして、深刻な問題を引き起こす可能性があります。クライアントに不必要な損失を与えます。 概要
信号の説明
##SIGUSR1-31 カスタムシグナル
サブプロセス終了シグナル

この記事を通じて、正常なシャットダウンに golang のチャネルと os/signal パッケージを使用する方法、およびシグナルをリッスンして正常なシャットダウンを完了する方法を学びました。実際の開発において、アプリケーションを正常にシャットダウンすることは非常に重要な作業であり、正常なシャットダウンはプログラムの安定性を効果的に向上させ、リソースの無駄やデータの損失などの問題を回避します。

以上がgolang のエレガントなシャットダウン方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Golang vs. Python:並行性とマルチスレッドGolang vs. Python:並行性とマルチスレッドApr 17, 2025 am 12:20 AM

Golangは高い並行性タスクにより適していますが、Pythonには柔軟性がより多くの利点があります。 1.Golangは、GoroutineとChannelを介して並行性を効率的に処理します。 2。Pythonは、GILの影響を受けるが、複数の並行性メソッドを提供するスレッドとAsyncioに依存しています。選択は、特定のニーズに基づいている必要があります。

GolangとC:パフォーマンスのトレードオフGolangとC:パフォーマンスのトレードオフApr 17, 2025 am 12:18 AM

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。

Golang vs. Python:アプリケーションとユースケースGolang vs. Python:アプリケーションとユースケースApr 17, 2025 am 12:17 AM

seetgolangforhighperformance andconcurrency、ithyforbackendservicesandnetworkプログラミング、selectthonforrapiddevelopment、datascience、andmachinelearningduetoistsversitydextentextensextensentensiveLibraries。

Golang vs. Python:重要な違​​いと類似点Golang vs. Python:重要な違​​いと類似点Apr 17, 2025 am 12:15 AM

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

Golang vs. Python:使いやすさと学習曲線Golang vs. Python:使いやすさと学習曲線Apr 17, 2025 am 12:12 AM

GolangとPythonはどのような側面で使いやすく、より滑らかな学習曲線を持っていますか? Golangは、高い並行性と高性能のニーズにより適しており、学習曲線はC言語の背景を持つ開発者にとって比較的穏やかです。 Pythonは、データサイエンスと迅速なプロトタイピングにより適しており、初心者にとって学習曲線は非常にスムーズです。

パフォーマンスレース:ゴラン対cパフォーマンスレース:ゴラン対cApr 16, 2025 am 12:07 AM

GolangとCにはそれぞれパフォーマンス競争において独自の利点があります。1)Golangは、高い並行性と迅速な発展に適しており、2)Cはより高いパフォーマンスと微細な制御を提供します。選択は、プロジェクトの要件とチームテクノロジースタックに基づいている必要があります。

Golang vs. C:コードの例とパフォーマンス分析Golang vs. C:コードの例とパフォーマンス分析Apr 15, 2025 am 12:03 AM

Golangは迅速な発展と同時プログラミングに適していますが、Cは極端なパフォーマンスと基礎となる制御を必要とするプロジェクトにより適しています。 1)Golangの並行性モデルは、GoroutineとChannelを介した同時性プログラミングを簡素化します。 2)Cのテンプレートプログラミングは、一般的なコードとパフォーマンスの最適化を提供します。 3)Golangのごみ収集は便利ですが、パフォーマンスに影響を与える可能性があります。 Cのメモリ管理は複雑ですが、コントロールは問題ありません。

Golangの影響:速度、効率、シンプルさGolangの影響:速度、効率、シンプルさApr 14, 2025 am 12:11 AM

speed、効率、およびシンプル性をspeedsped.1)speed:gocompilesquilesquicklyandrunseffictient、理想的なlargeprojects.2)効率:等系dribribraryreducesexexternaldedenciess、開発効果を高める3)シンプルさ:

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境