プログラミングでは、ユーザーがコマンド ライン インターフェイスを通じてプログラムの実行プロセスを操作できるようにする必要がある場合があります。この場合、プログラムはユーザー入力を受け取り、それに応じて処理できる必要があります。しかし、場合によっては、ユーザがプログラムの実行をキャンセルしたい場合もあり、その場合にはプログラムにコマンドをキャンセルする機能が必要となる。この記事では、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 サイトの他の関連記事を参照してください。