Apakah kaedah pemprosesan isyarat dalam bahasa Go?
Apakah kaedah pemprosesan isyarat dalam bahasa Go?
Bahasa Go ialah bahasa pengaturcaraan yang cekap dan ringkas dengan keupayaan serentak asli Ia digunakan secara meluas dalam pengaturcaraan rangkaian, sistem teragih, pengkomputeran awan dan bidang lain. Dalam bahasa Go, komunikasi antara proses dilaksanakan melalui paip dan isyarat. Artikel ini akan memperkenalkan penggunaan isyarat dan kaedah pemprosesannya dalam bahasa Go.
- Gambaran Keseluruhan Isyarat
Isyarat ialah mekanisme yang digunakan oleh sistem pengendalian untuk menghantar peristiwa tak segerak kepada proses. Dalam sistem pengendalian Unix/Linux, isyarat sering digunakan untuk memberitahu proses jenis peristiwa tertentu, seperti: masalah luar biasa dengan peranti perkakasan luaran, proses meminta penamatan, dan masa tertentu telah tiba, dsb. Dalam bahasa Go, pemprosesan isyarat menggunakan pakej "syscall/signal" dalam pustaka standard.
- Pemprosesan isyarat dalam bahasa Go
Dalam bahasa Go, adalah sangat mudah untuk menggunakan pakej isyarat untuk memproses isyarat. Pakej isyarat menyediakan dua fungsi untuk mengendalikan isyarat iaitu isyarat.Beritahu dan isyarat.Berhenti. Fungsi isyarat.Memberitahu boleh menambah isyarat yang ditentukan ke saluran, supaya apabila sistem menerima isyarat, ia akan menghantar isyarat ke saluran. Fungsi isyarat.Stop digunakan untuk menutup isyarat.Fungsi pemberitahuan. Biasanya, kami akan mencipta goroutine baharu untuk memproses isyarat yang diterima.
Seterusnya, kami akan menerangkan tiga cara untuk memproses isyarat:
Kaedah 1: Hanya terima satu isyarat
Cara paling mudah untuk memproses isyarat adalah dengan hanya memantau satu isyarat As ditunjukkan dalam contoh berikut:
package main import ( "fmt" "os" "os/signal" "syscall" ) func main() { c := make(chan os.Signal) signal.Notify(c, syscall.SIGINT) s := <-c fmt.Println("接收到信号:", s) }
Kod di atas mencipta saluran bernama c dan menambah isyarat SIGINT ke saluran melalui isyarat.Notify(c, syscall.SIGINT). Kemudian, pada penghujung program, gunakan <-c untuk menunggu isyarat tiba. Saluran ini boleh menerima berbilang isyarat, tetapi kami hanya memprosesnya sekali di sini.
Jalankan program ini dan anda boleh melihat mesej output yang menunjukkan "Isyarat diterima: gangguan".
Kaedah 2: Pantau berbilang isyarat
Jika anda ingin memantau berbilang isyarat, tambahkan berbilang isyarat pada saluran yang sama, seperti yang ditunjukkan di bawah:
package main import ( "fmt" "os" "os/signal" "syscall" ) func main() { c := make(chan os.Signal) signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) s := <-c fmt.Println("接收到信号:", s) }
Dalam kod di atas , kami menambah dua isyarat SIGINT dan SIGTERM ke saluran yang sama. Semasa menjalankan program ini, jika kita menekan "Ctrl+C" (isyarat SIGINT), atau menggunakan perintah bunuh pid untuk menghantar isyarat SIGTERM kepada proses, ia akan ditangkap.
Kaedah 3: Memproses isyarat dalam goroutine
Dalam atur cara, biasanya terdapat berbilang goroutin berjalan pada benang yang berbeza. Jika kita meletakkan logik menerima isyarat ke dalam goroutine, kita boleh memastikan ketepatan masa pemprosesan isyarat. Kod berikut menunjukkan cara mengendalikan isyarat dalam goroutine:
package main import ( "fmt" "os" "os/signal" "syscall" ) func handle(s os.Signal) { fmt.Println("接收到信号:", s) } func main() { c := make(chan os.Signal) signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) go func() { for { select { case s := <-c: go handle(s) } } }() fmt.Println("程序运行中...") select {} }
Dalam program ini, kami memulakan goroutine dalam fungsi utama dan menggunakan pernyataan pilih untuk menunggu isyarat tiba. Apabila isyarat ditangkap, fungsi pemegang dipanggil untuk diproses.
Pada masa yang sama, dalam program ini, kami menggunakan pernyataan pilih gelung tak terhingga untuk memastikan goroutine tidak akan keluar. Sudah tentu, terdapat cara lain untuk memastikan program berjalan dalam bahasa Go.
- Ringkasan
Artikel ini memperkenalkan tiga cara untuk mengendalikan isyarat dalam bahasa Go. Kaedah ini boleh memenuhi keperluan pemprosesan isyarat dalam kebanyakan kes. Dalam aplikasi praktikal, kita perlu membuat pilihan berdasarkan keperluan senario perniagaan. Pemprosesan isyarat ialah bahagian yang sangat penting dalam bahasa Go dan boleh membantu kami menulis program yang cekap dan elegan.
Atas ialah kandungan terperinci Apakah kaedah pemprosesan isyarat dalam bahasa Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat 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

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apabila menggunakan Goland untuk Pembangunan Bahasa GO, banyak pemaju akan menghadapi tag struktur tersuai ...

Apabila menggunakan SQL.Open, mengapa DSN tidak melaporkan ralat? Dalam bahasa Go, sql.open ...
