golangでコマンドキャンセル機能を実装する方法

PHPz
リリース: 2023-04-04 17:22:19
オリジナル
584 人が閲覧しました

プログラミングでは、ユーザーがコマンド ライン インターフェイスを通じてプログラムの実行プロセスを操作できるようにする必要がある場合があります。この場合、プログラムはユーザー入力を受け取り、それに応じて処理できる必要があります。しかし、場合によっては、ユーザがプログラムの実行をキャンセルしたい場合もあり、その場合にはプログラムにコマンドをキャンセルする機能が必要となる。この記事では、Go言語を使ってこの機能を実装する方法を紹介します。

Go 言語では、コマンドライン入力を処理する main 関数は通常次のようになります:

func main() {
    // 处理命令行输入
    // ...
    // 执行主程序流程
    // ...
}
ログイン後にコピー

コマンドのキャンセルをサポートするには、次のようなチャネル (チャネル) を導入する必要があります。メインプログラム処理で使用 受信キャンセル信号。キャンセル信号を受信したら、メインプログラムプロセスを終了し、関連リソースをリサイクルする必要があります。

まず、interrupt というタイプの os.Signal というチャネルを定義します。 os.Signal は、オペレーティング システム レベルでプロセスにシグナルを送信するために使用されるシグナル タイプです。

var interrupt = make(chan os.Signal, 1)
ログイン後にコピー

次に、interrupt チャネルをオペレーティング システム レベルの割り込み信号に関連付ける必要があります。このようにして、プログラムがオペレーティング システム レベルの割り込み信号 (Ctrl C など) を受信すると、interrupt チャネルが対応する信号を受信します。

signal.Notify(interrupt, os.Interrupt)
ログイン後にコピー

上記のコードは、interrupt チャネルを os.Interrupt 信号に関連付けます。これは、オペレーティング システムがプロセスに割り込み信号を送信すると、interrupt チャネルが os.Interrupt 信号を受信することを意味します。

これで、メイン プログラム プロセスで interrupt チャネルをリッスンできるようになりました。シグナルを受信した場合、ユーザーがプログラムの実行をキャンセルしたいことがわかります。この場合、リソースを再利用してプログラムを終了する必要があります。

select {
case <-interrupt:
    // 收到取消信号
    // 回收资源并退出程序
    // ...
default:
    // 继续执行主程序流程
    // ...
}
ログイン後にコピー

上記のコードは、Go 言語の select メカニズムを使用し、interrupt チャネルを監視します。 select この仕組みの特徴は、いずれかの case ステートメントのみが実行されることです。 interrupt チャネルがシグナルを受信すると、case <-interrupt: が実行され、そうでない場合は、default: 分岐が実行され、メイン プログラム フローが実行されます。つづきます。

コマンドをキャンセルする機能が追加されました。ユーザーは、プログラムの実行中に Ctrl C を押してプログラムに割り込み信号を送信することで、プログラムの実行をキャンセルできます。

完全なコードは次のとおりです。

package main

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

func main() {
    // 创建一个用于接收取消信号的通道
    var interrupt = make(chan os.Signal, 1)
    // 将 interrupt 通道与操作系统的中断信号关联
    signal.Notify(interrupt, os.Interrupt)

    // 执行主程序流程
    for {
        select {
        case <-interrupt:
            // 收到取消信号
            // 回收资源并退出程序
            fmt.Println("程序被取消")
            // ...
            return
        default:
            // 继续执行主程序流程
            fmt.Println("程序正在执行")
            // ...
        }
    }
}
ログイン後にコピー

このプログラムの実行中に、Ctrl C を押してプログラムに割り込み信号を送信し、プログラムの実行をキャンセルできます。

以上がgolangでコマンドキャンセル機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート