Rumah pembangunan bahagian belakang Golang Bagaimana untuk melaksanakan fungsi membatalkan arahan dalam golang

Bagaimana untuk melaksanakan fungsi membatalkan arahan dalam golang

Apr 04, 2023 pm 04:13 PM

Dalam 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() {
    // 处理命令行输入
    // ...
    // 执行主程序流程
    // ...
}
Salin selepas log masuk

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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:
    // 继续执行主程序流程
    // ...
}
Salin selepas log masuk

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("程序正在执行")
            // ...
        }
    }
}
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah? GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah? Mar 03, 2025 pm 05:17 PM

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 untuk melaksanakan pemindahan maklumat jangka pendek antara halaman dalam kerangka beego? Mar 03, 2025 pm 05:22 PM

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

Bagaimana saya menulis objek dan stub untuk ujian di GO? Bagaimana saya menulis objek dan stub untuk ujian di GO? Mar 10, 2025 pm 05:38 PM

Bagaimana saya menulis objek dan stub untuk ujian di GO?

Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya? Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya? Mar 10, 2025 pm 05:36 PM

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 cara menukar senarai hasil pertanyaan mysql ke dalam slice struktur tersuai dalam bahasa Go? Mar 03, 2025 pm 05:18 PM

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 saya boleh menentukan kekangan jenis tersuai untuk generik di GO? Mar 10, 2025 pm 03:20 PM

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

Bagaimana cara menulis fail dalam bahasa Go dengan mudah? Bagaimana cara menulis fail dalam bahasa Go dengan mudah? Mar 03, 2025 pm 05:15 PM

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? Bagaimanakah saya boleh menggunakan alat linter dan analisis statik untuk meningkatkan kualiti dan pemeliharaan kod pergi saya? Mar 10, 2025 pm 05:38 PM

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

See all articles