Trung BìnhGolang iconGolang

Channel trong Go là gì? Dùng thế nào?

  • Kênh giao tiếp giữa goroutines.
  • Unbuffered channel: block đến khi cả sender và receiver sẵn sàng.
  • Buffered: không block nếu buffer chưa đầy.
go
// Tạo channel
ch := make(chan int)        // unbuffered
bch := make(chan int, 10)  // buffered capacity 10

// Gửi và nhận
go func() {
    ch <- 42 // send — block đến khi có receiver
}()
val := <-ch // receive — block đến khi có data
fmt.Println(val) // 42

// Directional channels (best practice)
func producer(out chan<- int) { // chỉ gửi
    out <- 1
}
func consumer(in <-chan int) { // chỉ nhận
    fmt.Println(<-in)
}

// Close và range
close(ch)
for v := range ch { // tự dừng khi channel đóng
    fmt.Println(v)
}

Xem toàn bộ Golang cùng filter theo level & chủ đề con.

Mở danh sách Golang