0Pricing
Go Academy · Pelajaran

Pernyataan select

Melakukan multiplexing channel dengan select

Pernyataan select adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Apa itu pemilihan?

Pernyataan select memungkinkan rutin Go menunggu beberapa operasi kanal secara bersamaan. Pernyataan ini memilih kasus pertama yang siap dijalankan, mirip dengan switch, tetapi untuk kanal.

Sintaks Dasar

Setiap case dalam select merupakan pengiriman atau penerimaan melalui kanal:

select {
case msg := <-ch1:
    fmt.Println("ch1:", msg)
case msg := <-ch2:
    fmt.Println("ch2:", msg)
}

Tanpa pemblokiran dengan nilai bawaan

Menambahkan kasus default membuat pemilihan tidak memblokir—jika tidak ada kanal yang siap, eksekusi langsung beralih ke nilai bawaan.

select {
case v := <-ch:
    fmt.Println(v)
default:
    fmt.Println("no value ready")
}

Pemilihan Acak

Jika beberapa kasus siap pada saat yang sama, Go memilih salah satunya secara acak—setiap kasus yang siap memiliki peluang yang sama untuk dipilih. Hal ini mencegah kelaparan.

Pengiriman dalam Pemilihan

Kasus juga dapat berupa pengiriman melalui kanal. Kasus pengiriman siap ketika kanal memiliki ruang penyangga (atau ada penerima yang sedang menunggu).

select {
case ch1 <- val1:
    fmt.Println("sent to ch1")
case ch2 <- val2:
    fmt.Println("sent to ch2")
}

Pemilihan Kosong Memblokir Selamanya

select{} tanpa kasus apa pun akan memblokir rutin Go saat ini selamanya. Ini merupakan idiom umum untuk menjaga rutin Go utama tetap aktif saat rutin Go lain berjalan.

func main() {
    go serve()
    select {} // block forever
}

Perulangan dengan Pemilihan

Bungkus select di dalam perulangan for untuk terus-menerus memultiplex kanal. Tambahkan kanal penyelesaian agar dapat keluar dengan rapi.

for {
    select {
    case v := <-data:
        process(v)
    case <-done:
        return
    }
}

Kanal Nihil

Kanal nihil memblokir selamanya dalam kasus pemilihan, sehingga kasus tersebut secara efektif dinonaktifkan. Anda dapat menggunakannya untuk mengaktifkan atau menonaktifkan kasus secara dinamis saat program berjalan.

var ch chan int // nil
select {
case v := <-ch: // never selected
    _ = v
case v := <-other:
    fmt.Println(v)
}

Pemilihan dengan Kanal Tertutup

Penerimaan dari kanal yang sudah ditutup selalu berhasil seketika dan mengembalikan nilai nol. Gunakan bentuk penerimaan dua nilai untuk mendeteksi penutupan.

select {
case v, ok := <-ch:
    if !ok { return } // channel closed
    use(v)
}

Pola Prioritas

Pemilihan Go tidak mendukung prioritas secara bawaan. Untuk memprioritaskan satu kanal, susun pemilihan secara bertingkat atau gunakan perulangan yang memeriksa kanal berprioritas tinggi terlebih dahulu dengan nilai bawaan.

for {
    select {
    case v := <-highPriority:
        handle(v)
    default:
        select {
        case v := <-lowPriority:
            handle(v)
        }
    }
}

Ringkasan Sejauh Ini

select menunggu beberapa kanal, memilih kasus yang siap secara acak, mendukung nilai bawaan agar tidak memblokir, dan kanal nihil menonaktifkan kasus. Pola umum: for+select+kanal penyelesaian.

Pemeriksaan Singkat

Apa yang terjadi jika beberapa kasus dalam select siap pada saat yang sama?

Ringkasan: Pernyataan Pemilihan

Poin penting:

  • select memblokir hingga salah satu kasus kanal siap
  • Beberapa kasus siap → dipilih secara acak
  • default membuatnya tidak memblokir
  • kanal nihil menonaktifkan kasusnya
  • for+select+kanal penyelesaian adalah perulangan multiplex standar

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pernyataan select” gratis?

Ya — teks lengkap “Pernyataan select” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pernyataan select”?

Melakukan multiplexing channel dengan select Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Pernyataan select” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pernyataan select
  2. Batas Waktu dan Ticker
  3. Pola Fan-in dan Fan-out
  4. Pola Kumpulan Worker
← Kembali ke Go Academy