Memahami Channel Direction di Golang

Di seri sebelumnya, kita sudah belajar tentang Select statement. Kali ini kita akan bahas fitur keren lainnya di Golang: Channel Direction.
Apa Itu Channel Direction?
Biasanya, channel di Go bisa digunakan untuk mengirim dan menerima data.
Tapi, dengan Channel Direction, kita bisa membatasi channel hanya untuk:
* Kirim data saja (chan<- Type)
* Terima data saja (<-chan Type)
Ini membuat program kita:
* Lebih aman (mengurangi kesalahan penggunaan channel)
* Lebih mudah dibaca (jelas mana channel untuk kirim, mana untuk terima)
Cara Menggunakan Channel Direction
1. Channel Hanya untuk Mengirim (Send-only)
Deklarasi chan<- Type berarti channel hanya bisa untuk mengirim data.
func SendOnly(ch chan<- string) {
ch <- "Data dikirim"
}✅ Fungsi SendOnly hanya bisa mengirim data ke ch, tidak bisa menerima.
2. Channel Hanya untuk Menerima (Receive-only)
Deklarasi <-chan Type berarti channel hanya bisa untuk menerima data.
func ReceiveOnly(ch <-chan string) {
data := <-ch
fmt.Println("Menerima:", data)
}✅ Fungsi ReceiveOnly hanya bisa membaca data dari ch, tidak bisa mengirim.
Contoh Lengkap Channel Direction
package goroutine_test
import (
"fmt"
"testing"
)
// Fungsi hanya bisa mengirim data
func SendOnly(ch chan<- string) {
ch <- "Hello from SendOnly"
}
// Fungsi hanya bisa menerima data
func ReceiveOnly(ch <-chan string) {
data := <-ch
fmt.Println("Received:", data)
}
func TestChannelDirection(t *testing.T) {
ch := make(chan string)
go SendOnly(ch) // kirim data
ReceiveOnly(ch) // terima data
}🧠 Kenapa Harus Pakai Channel Direction?
* Mencegah Bug:
Kalau kamu tidak ingin fungsi tertentu menerima data, cukup ubah channel-nya jadi chan<-.
* Lebih Terstruktur:
Channel direction membantu mengatur tanggung jawab setiap fungsi dengan jelas.
* Lebih Aman Saat Refactor:
Kalau project kamu besar, channel direction membantu mengurangi resiko kesalahan penggunaan channel di banyak tempat.
Kesimpulan
Hari ini kita belajar:
* Cara membatasi channel supaya hanya kirim atau hanya terima.
* Channel direction membuat kode Go kita lebih aman, bersih, dan jelas.
* Menggunakan channel direction adalah praktik yang baik terutama dalam aplikasi yang kompleks.
Article Series
Golang Goroutine
Lanjutkan membaca seri ini untuk melihat perjalanan lengkapnya.
- 1Membuat Goroutine di Golang24 Apr 20252 min read
- 2Pengenalan Channel di Golang28 Apr 20253 min read
- 3Race Condition dan Cara Menghindarinya di Golang28 Apr 20253 min read
- 4Menunggu Goroutine Selesai dengan WaitGroup29 Apr 20252 min read
- 5Memahami Buffered Channel di Golang29 Apr 20253 min read
- 6Mengenal Select Statement di Golang29 Apr 20252 min read
- 7Memahami Channel Direction di Golang29 Apr 20252 min readCurrent article
- 8Best Practice dan Kapan Sebaiknya Tidak Menggunakan Goroutine29 Apr 20252 min read