


Bagaimana untuk melaksanakan fungsi membatalkan arahan dalam golang
Apr 04, 2023 pm 04:13 PMDalam pengaturcaraan, kadangkala kita perlu membenarkan pengguna mengendalikan proses pelaksanaan program melalui antara muka baris arahan. Dalam kes ini, program mesti boleh menerima input pengguna dan memprosesnya dengan sewajarnya. Walau bagaimanapun, dalam beberapa kes, pengguna mungkin ingin membatalkan pelaksanaan program Dalam kes ini, program perlu mempunyai fungsi membatalkan arahan. Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk melaksanakan fungsi ini.
Dalam bahasa Go, fungsi utama yang memproses input baris arahan biasanya kelihatan seperti ini:
func main() { // 处理命令行输入 // ... // 执行主程序流程 // ... }
Untuk menyokong perintah pembatalan, kita perlu memperkenalkan saluran (saluran) untuk utama Terima isyarat pembatalan semasa aliran program. Apabila menerima isyarat pembatalan, kita perlu keluar dari proses program utama dan mengitar semula sumber berkaitan.
Pertama, kami mentakrifkan saluran yang dipanggil interrupt
dengan jenis os.Signal
. os.Signal
ialah jenis isyarat yang digunakan untuk menghantar isyarat kepada proses di peringkat sistem pengendalian.
var interrupt = make(chan os.Signal, 1)
Seterusnya, kita perlu mengaitkan saluran interrupt
dengan isyarat gangguan tahap sistem pengendalian. Dengan cara ini, apabila program menerima isyarat gangguan tahap sistem pengendalian (seperti Ctrl+C), saluran interrupt
akan menerima isyarat yang sepadan.
signal.Notify(interrupt, os.Interrupt)
Kod di atas mengaitkan saluran interrupt
dengan isyarat os.Interrupt
. Ini bermakna apabila sistem pengendalian menghantar isyarat gangguan kepada proses, saluran interrupt
akan menerima isyarat os.Interrupt
.
Kini kita boleh mendengar saluran interrupt
dalam aliran program utama. Jika isyarat diterima, kami tahu bahawa pengguna ingin membatalkan pelaksanaan program. Dalam kes ini kita perlu menuntut semula sumber dan keluar dari program.
select { case <-interrupt: // 收到取消信号 // 回收资源并退出程序 // ... default: // 继续执行主程序流程 // ... }
Kod di atas menggunakan mekanisme select
dalam bahasa Go untuk mendengar saluran interrupt
. Ciri mekanisme select
ialah hanya satu daripada pernyataan kes akan dilaksanakan. Jika saluran interrupt
menerima isyarat, case <-interrupt:
akan dilaksanakan; jika tidak, cawangan default:
akan dilaksanakan dan aliran program utama akan diteruskan.
Kini, kami mempunyai keupayaan untuk membatalkan arahan. Pengguna boleh membatalkan pelaksanaan program dengan menghantar isyarat gangguan kepada program dengan menekan Ctrl+C semasa pelaksanaan program.
Kod lengkap adalah seperti berikut:
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("程序正在执行") // ... } } }
Apabila menjalankan program ini, anda boleh menghantar isyarat gangguan kepada program dengan menekan Ctrl+C untuk membatalkan pelaksanaan program.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan fungsi membatalkan arahan dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah?

Bagaimana untuk melaksanakan pemindahan maklumat jangka pendek antara halaman dalam kerangka beego?

Bagaimana saya menulis objek dan stub untuk ujian di GO?

Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya?

Bagaimana cara menukar senarai hasil pertanyaan mysql ke dalam slice struktur tersuai dalam bahasa Go?

Bagaimana saya boleh menentukan kekangan jenis tersuai untuk generik di GO?

Bagaimana cara menulis fail dalam bahasa Go dengan mudah?

Bagaimanakah saya boleh menggunakan alat linter dan analisis statik untuk meningkatkan kualiti dan pemeliharaan kod pergi saya?
