cari

penggunaan saluran golang

May 16, 2023 am 10:25 AM

Golang ialah bahasa pengaturcaraan yang popular kerana kecekapan, keselamatan memori dan keselarasannya. Di Golang, komunikasi serentak boleh dicapai dengan mudah menggunakan saluran, yang juga merupakan salah satu kelebihan utama Golang. Artikel ini akan memberikan pengenalan yang mendalam tentang konsep asas, penggunaan dan beberapa teknik saluran di Golang.

  1. Apakah itu saluran

Di Golang, saluran ialah struktur data yang digunakan untuk komunikasi Goroutine. Ia boleh ditimbal atau tidak ditimbal. Saluran tidak buffer ialah saluran segerak yang menyekat kedua-dua penghantaran dan penerimaan data. Apabila data yang dihantar tidak diterima, operasi penghantaran akan disekat sehingga Goroutine menerima data tersebut. Begitu juga, apabila penerima tidak bersedia untuk menerima data, operasi terima akan disekat. Saluran penimbal membenarkan data dihantar dan diterima sebelum penimbal penuh, dan kapasiti penimbal ialah saiz yang ditentukan apabila saluran dibuat.

saluran boleh ditakrifkan dan dimulakan dengan cara berikut:

var ch chan int // 定义一个 int 类型的 channel

ch = make(chan int) // 初始化 channel

ch := make(chan int) // 定义并初始化 channel
  1. Penggunaan saluran

Di Golang, apabila menggunakan saluran, ia biasanya melibatkan berikut Dua operasi:

  • Hantar data
  • Terima data

Sintaks asas untuk menghantar data melalui saluran:

ch <- data  // 将 data 发送到 channel ch 上

Terima melalui saluran Sintaks asas data:

data := <- ch // 从 channel ch 中接收数据,并将其赋值给变量 data

Nota: Operasi penerimaan akan disekat sehingga data dihantar ke saluran Jika saluran telah ditutup dan tiada data di dalamnya, operasi penerimaan akan kembali serta-merta dan menetapkan a nilai sifar kepada pembolehubah penerima.

Berikut ialah contoh mudah:

package main

import "fmt"

func main() {
    ch := make(chan int)
    go sendData(ch)

    for i := range ch {
        fmt.Println("Received:", i)
        if i == 10 {
            break
        }
    }
}

func sendData(ch chan int) {
    for i := 0; i < 10; i++ {
        ch <- i
    }
    close(ch) // 关闭 channel
}

Dalam contoh di atas, kami mentakrifkan fungsi sendDate untuk menghantar data ke ch. Dalam fungsi utama, kami mencipta saluran dan menggunakan kaedah julat untuk menerima data daripada saluran satu demi satu. Apabila data yang diterima ialah 10, kami keluar dari gelung dan menutup saluran.

  1. Ciri-ciri menyekat saluran

Di Golang, saluran ialah struktur data yang menyekat, yang bermaksud apabila Goroutine cuba menghantar data ke saluran penuh atau Mereka disekat apabila menerima data daripada saluran kosong. Ini membantu memastikan penyegerakan dan kerjasama antara Goroutines.

Seterusnya, kami akan menunjukkan ciri menyekat saluran melalui contoh:

package main

import "fmt"

func main() {
    ch := make(chan int, 2)

    ch <- 1 // 发送数据
    ch <- 2

    fmt.Println(<-ch) // 接收数据
    fmt.Println(<-ch)

    ch <- 3
    fmt.Println("数据已经被发送,但是没有接收方")
}

Dalam contoh ini, kami mencipta saluran dengan saiz penimbal 2 dan cuba menghantar 3 data kepadanya. Dua data pertama boleh dihantar kerana penimbal belum penuh. Tetapi apabila kami cuba menerima data ini, kami perlu menunggu penerima setiap data satu persatu sebelum kami boleh meneruskan penghantaran. Pada percubaan ketiga untuk menghantar data ke saluran, penghantar akan disekat kerana tiada penerima.

  1. Penutupan saluran

Di Golang, saluran boleh ditutup melalui kaedah tutup. Saluran tertutup akan mengembalikan nilai sifar apabila diterima dan tidak akan disekat Ini membolehkan penerima menentukan dengan tepat sama ada saluran telah ditutup selepas menerima data.

Berikut ialah contoh:

package main

import "fmt"

func main() {
    ch := make(chan int)

    go sendData(ch)

    for i := range ch {
        fmt.Println("Received:", i)
    }
}

func sendData(ch chan int) {
    for i := 0; i < 10; i++ {
        ch <- i
    }
    close(ch) // 关闭 channel
}

Dalam contoh ini, apabila fungsi sendDate telah selesai menghantar data, ia akan menggunakan kaedah tutup untuk menutup saluran. Dalam fungsi utama, kami menggunakan kaedah julat untuk menerima data yang dihantar dari saluran apabila tiada data dalam saluran, kaedah julat akan keluar dari gelung.

  1. Pemilih saluran

Selain operasi saluran asas di atas, Golang juga menyediakan pemilih (pilihan) yang boleh digunakan antara pilihan berbilang saluran. Ini berguna untuk mengendalikan operasi hantar dan terima pada berbilang saluran.

Berikut ialah contoh:

package main

import (
    "fmt"
    "time"
)

func main() {
    ch1 := make(chan int)
    ch2 := make(chan int)

    go func() {
        time.Sleep(2 * time.Second)
        ch1 <- 1
    }()

    go func() {
        time.Sleep(5 * time.Second)
        ch2 <- 2
    }()

    for i := 0; i < 2; i++ {
        select {
        case <-ch1:
            fmt.Println("Received from ch1")
        case <-ch2:
            fmt.Println("Received from ch2")
        }
    }
}

Dalam contoh ini, kami mentakrifkan dua saluran. Hantar data ke saluran selepas kelewatan 2 saat dan 5 saat masing-masing dalam dua Goroutine. Kemudian, dalam fungsi utama, kami menggunakan kaedah pilih untuk mendengar kedua-dua saluran. Apabila terdapat data dalam saluran, kaedah pilih akan bertindak balas.

  1. Ringkasan

Di Golang, saluran ialah alat yang sangat berkuasa dan mudah digunakan. Melalui saluran, kami boleh mencapai komunikasi dan penyegerakan antara Goroutines, dengan itu meningkatkan prestasi keselarasan program. Artikel ini memperkenalkan konsep asas, penggunaan dan beberapa teknik saluran, dengan harapan dapat membantu pembaca lebih memahami cara menggunakan saluran untuk membina program serentak yang boleh dipercayai.

Atas ialah kandungan terperinci penggunaan saluran 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
Golang dan Python: Memahami PerbezaanGolang dan Python: Memahami PerbezaanApr 18, 2025 am 12:21 AM

Perbezaan utama antara Golang dan Python adalah model konvensional, sistem jenis, prestasi dan kelajuan pelaksanaan. 1. Golang menggunakan model CSP, yang sesuai untuk tugas serentak yang tinggi; Python bergantung pada multi-threading dan gil, yang sesuai untuk tugas I/O-intensif. 2. Golang adalah jenis statik, dan Python adalah jenis dinamik. 3. Golang mengumpulkan kelajuan pelaksanaan bahasa adalah cepat, dan pembangunan bahasa yang ditafsirkan Python adalah pantas.

Golang vs C: Menilai perbezaan kelajuanGolang vs C: Menilai perbezaan kelajuanApr 18, 2025 am 12:20 AM

Golang biasanya lebih perlahan daripada C, tetapi Golang mempunyai lebih banyak kelebihan dalam pengaturcaraan serentak dan kecekapan pembangunan: 1) Koleksi sampah Golang dan model konkurensi menjadikannya berfungsi dengan baik dalam senario konvensyen yang tinggi; 2) C memperoleh prestasi yang lebih tinggi melalui pengurusan memori manual dan pengoptimuman perkakasan, tetapi mempunyai kerumitan pembangunan yang lebih tinggi.

Golang: bahasa utama untuk pengkomputeran awan dan devOpsGolang: bahasa utama untuk pengkomputeran awan dan devOpsApr 18, 2025 am 12:18 AM

Golang digunakan secara meluas dalam pengkomputeran awan dan devOps, dan kelebihannya terletak pada kesederhanaan, kecekapan dan keupayaan pengaturcaraan serentak. 1) Dalam pengkomputeran awan, Golang dengan cekap mengendalikan permintaan serentak melalui mekanisme goroutine dan saluran. 2) Di DevOps, kompilasi cepat Golang dan ciri-ciri silang platform menjadikannya pilihan pertama untuk alat automasi.

Golang dan C: Memahami kecekapan pelaksanaanGolang dan C: Memahami kecekapan pelaksanaanApr 18, 2025 am 12:16 AM

Golang dan C masing -masing mempunyai kelebihan sendiri dalam kecekapan prestasi. 1) Golang meningkatkan kecekapan melalui pengumpulan goroutine dan sampah, tetapi boleh memperkenalkan masa jeda. 2) C menyedari prestasi tinggi melalui pengurusan memori manual dan pengoptimuman, tetapi pemaju perlu menangani kebocoran memori dan isu -isu lain. Apabila memilih, anda perlu mempertimbangkan keperluan projek dan timbunan teknologi pasukan.

Golang vs Python: Konvensyen dan MultithreadingGolang vs Python: Konvensyen dan MultithreadingApr 17, 2025 am 12:20 AM

Golang lebih sesuai untuk tugas -tugas kesesuaian yang tinggi, sementara Python mempunyai lebih banyak kelebihan dalam fleksibiliti. 1.Golang dengan cekap mengendalikan kesesuaian melalui goroutine dan saluran. 2. Pilihannya harus berdasarkan keperluan khusus.

Golang dan C: Perdagangan dalam prestasiGolang dan C: Perdagangan dalam prestasiApr 17, 2025 am 12:18 AM

Perbezaan prestasi antara Golang dan C terutamanya ditunjukkan dalam pengurusan ingatan, pengoptimuman kompilasi dan kecekapan runtime. 1) Mekanisme pengumpulan sampah Golang adalah mudah tetapi boleh menjejaskan prestasi, 2) Pengurusan memori manual C dan pengoptimuman pengkompil lebih cekap dalam pengkomputeran rekursif.

Golang vs Python: Aplikasi dan Kes GunakanGolang vs Python: Aplikasi dan Kes GunakanApr 17, 2025 am 12:17 AM

PilihgolangforhighperformanceandConcurrency, IdealForBackEndServicesandnetworkprogramming; SelectPythonForrapidDevelopment, datascience, danMachinelearningDuetoitSversativilityAndextiveLibraries.

Golang vs Python: Perbezaan dan Persamaan UtamaGolang vs Python: Perbezaan dan Persamaan UtamaApr 17, 2025 am 12:15 AM

Golang dan Python masing -masing mempunyai kelebihan mereka sendiri: Golang sesuai untuk prestasi tinggi dan pengaturcaraan serentak, sementara Python sesuai untuk sains data dan pembangunan web. Golang terkenal dengan model keserasiannya dan prestasi yang cekap, sementara Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya.

See all articles

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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.