地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

go シグナルハンドリング

golangcliツールを書く際にsigintをプログラムでハンドリングする際の方法

os/signalを使用することで容易にシグナルのハンドリングを行うことができるとのこと。

qiita.com

上記の記事内ではSIGINTについてのハンドリング方法が記載されている。

上記のパッケージとchannelを使用する。

package main

import (
    "os"
    "os/signal"
    "fmt"
    "syscall"
)

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

    switch(sigCh) {
        case syscall.SIGTERM:
            fmt.Println("SIGTERM")
        case syscall.SIGINT:
            fmt.Println("SIGINT")
    }
}

それにしてもシグナルを検知したらサブ処理を実行って感じの処理がこんなにも簡単に書けちゃうのはすごい。