Rumah  >  Artikel  >  pembangunan bahagian belakang  >  permintaan asynchronous golang

permintaan asynchronous golang

WBOY
WBOYasal
2023-05-18 21:55:36650semak imbas

Dengan perkembangan pesat Internet, semakin banyak aplikasi perlu berinteraksi dengan perkhidmatan luaran, dan API yang disediakan oleh perkhidmatan ini selalunya tidak segerak. Dalam program satu benang, permintaan penyegerakan sering menyebabkan kesesakan program, menjejaskan prestasi program dan kelajuan tindak balas. Oleh itu, dari segi permintaan tak segerak, reka bentuk unik bahasa golang membolehkan kami melaksanakan panggilan tak segerak dengan lebih mudah dan meningkatkan daya pemprosesan dan kelajuan tindak balas aplikasi.

Artikel ini akan memperkenalkan cara golang melaksanakan permintaan tak segerak, memahami goroutine dan saluran dalam golang serta cara menggunakannya untuk melaksanakan operasi tak segerak.

goroutine

goroutine dalam golang ialah benang ringan yang boleh melaksanakan berbilang tugas serentak dalam satu utas. Dengan menggunakan kata kunci go, kita boleh memulakan goroutine baharu dalam program ini. Ambil contoh mudah:

go func() {
    fmt.Println("Hello, goroutine!")
}()

Dalam contoh di atas, kami memulakan goroutine baharu dan mencetak mesej dalam goroutine. Apabila kita menjalankan program, kita dapat melihat bahawa mesej dicetak sebelum mesej utas utama. Ini menunjukkan bahawa ia dilaksanakan dalam goroutine yang berbeza.

perlaksanaan goroutine akan bermula apabila pernyataan go dipanggil, bukan apabila fungsi bermula. Oleh itu, kita boleh memulakan berbilang goroutine dalam urutan yang sama dan melaksanakan berbilang tugas serentak tanpa perlu risau tentang keadaan perlumbaan di antara mereka.

saluran

saluran adalah satu lagi konsep penting dalam golang Ia adalah mekanisme komunikasi yang digunakan untuk penghantaran data antara gorouti yang berbeza. Kaedah mencipta saluran adalah sangat mudah:

ch := make(chan <type>)

di mana, 7674b22ef33c73b930516fd6bc30b7a3 ialah jenis data yang dihantar dalam saluran. Apabila menggunakan saluran, kita boleh menggunakan kata kunci <- untuk menghantar atau menerima mesej. Contohnya:

ch <- "Hello, channel!"
msg := <- ch

Dalam contoh di atas, kami mula-mula menghantar mesej ke saluran dan kemudian menerima mesej daripada saluran. Begitu juga, kita juga boleh menghantar mesej dalam satu goroutine dan kemudian menerima mesej dalam goroutine lain untuk mencapai komunikasi antara goroutine yang berbeza.

Permintaan tak segerak

Dengan pengetahuan goroutine dan saluran yang diperkenalkan sebelum ini, kami kini boleh melaksanakan permintaan tak segerak dengan mudah. Sebagai contoh, kita boleh menulis fungsi yang menggunakan goroutine untuk memulakan operasi tak segerak dan menghantar hasilnya ke saluran apabila operasi selesai. Contohnya:

func asyncRequest(url string, ch chan<- []byte) {
    resp, err := http.Get(url)
    if err == nil {
        body, _ := ioutil.ReadAll(resp.Body)
        ch <- body
    }
}

Dalam fungsi di atas, kami mula-mula menggunakan fungsi http.Get() untuk mendapatkan respons URL yang ditentukan. Kemudian, jika tiada ralat berlaku, kami menghantar badan respons ke saluran. Ambil perhatian bahawa kami menggunakan ch chan<- []byte dalam tandatangan fungsi, yang bermaksud bahawa saluran hanya boleh digunakan untuk menghantar data, bukan menerima data.

Kini kita boleh menggunakan fungsi ini untuk memulakan permintaan tak segerak dan menerima respons setelah permintaan selesai. Contohnya:

func main() {
    ch := make(chan []byte)
    go asyncRequest("https://www.example.com", ch)
    data := <- ch
    fmt.Printf("Response: %s
", data)
}

Dalam contoh di atas, kami memulakan permintaan tak segerak dan menerima respons daripada saluran menggunakan sintaks <- ch. Apabila operasi tak segerak selesai, kami menerima respons dan mencetak kandungannya.

Menggunakan kaedah di atas, kami boleh melaksanakan permintaan tak segerak dengan mudah tanpa perlu risau tentang keadaan perlumbaan atau program yang tersekat. Selain itu, goroutine dan saluran dalam golang dengan mudah boleh memanjangkan aplikasi kami untuk melaksanakan operasi tak segerak yang lebih kompleks.

Atas ialah kandungan terperinci permintaan asynchronous golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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
Artikel sebelumnya:java ke golangArtikel seterusnya:java ke golang