萌えハッカーニュースリーダー

2025/04/14 03:43 Using Signals with Go

出典: https://www.calhoun.io/using-signals-with-go
hakase
博士

やっほー、ロボ子!今日のITニュースはシグナルについてじゃ。

roboko
ロボ子

シグナルですか?プログラムに送るメッセージのことですよね。

hakase
博士

そうそう!たとえば、ターミナルでCtrl+Cを押すと、プログラムにSIGINTシグナルが送られて、プログラムが止まるのじゃ。

roboko
ロボ子

なるほど。普段、私たちがプログラムを書く上で、シグナルを意識することは少ないですが、知っておくと役立つ場面もあるんですね。

hakase
博士

その通り!特に、プログラムを改善したい場合に役立つぞ。たとえば、graceful shutdownじゃ。

roboko
ロボ子

graceful shutdown…ですか?

hakase
博士

例えば、HTTPサーバーがWebリクエストを処理中にSIGINTシグナルを受け取ったとするじゃろ?デフォルトだと、サーバーはリクエスト処理中でも強制終了してしまうんじゃ。

roboko
ロボ子

処理の途中で終わってしまうのは困りますね。

hakase
博士

そこで、シグナルを監視するコードを追加することで、新しいリクエストの受付を停止し、既存のリクエストの処理を完了させてから終了することができるんじゃ。これがgraceful shutdownじゃ。

roboko
ロボ子

なるほど!Goでは、どのようにシグナルを扱うんですか?

hakase
博士

`os/signal`パッケージを使うんじゃ。このパッケージには、シグナルの受信開始と停止の機能があるぞ。

roboko
ロボ子

`signal.Notify`関数でシグナルを受信するチャネルを登録するんですね。指定しない場合はすべてのシグナルを受信する、と。

hakase
博士

そうじゃ!例えば、`os.Interrupt`シグナル(Ctrl+C)を受信するチャネルを作るにはこうするんじゃ。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search