Rumah pembangunan bahagian belakang Golang Apakah kaedah pemprosesan isyarat dalam bahasa Go?

Apakah kaedah pemprosesan isyarat dalam bahasa Go?

Jun 11, 2023 pm 12:28 PM
pergi bahasa Cara pemprosesan isyarat

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.

  1. 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.

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

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

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

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.

  1. 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!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat 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)

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

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

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

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. � ...

Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Apr 02, 2025 pm 02:03 PM

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

Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Apr 02, 2025 pm 04:54 PM

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

Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apr 02, 2025 pm 12:57 PM

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 disediakan oleh projek sumber terbuka yang terkenal? Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Apr 02, 2025 pm 04:12 PM

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? Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apr 02, 2025 pm 05:09 PM

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 tidak melaporkan ralat apabila DSN berlalu kosong? Apabila menggunakan sql.open, mengapa tidak melaporkan ralat apabila DSN berlalu kosong? Apr 02, 2025 pm 12:54 PM

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

See all articles