Pemrograman konkuren merupakan salah satu aspek utama dalam bahasa pemrograman Go (Golang). Goroutines dan channels adalah fitur-fitur kunci yang memungkinkan pengembang untuk membuat aplikasi yang efisien dan berskala tinggi dengan mudah. Dalam tutorial ini, kita akan menjelaskan konsep dasar goroutines dan channels, serta bagaimana menggunakannya untuk menciptakan pemrograman konkuren dalam Go.
Pada contoh di atas,
Pada contoh di atas,
Pengenalan Goroutines dan Channels
Goroutines adalah fungsi yang berjalan secara konkuren atau paralel dengan fungsi lainnya. Mereka dapat dianggap sebagai "benang ringan" yang dikelola oleh runtime Go, yang memungkinkan eksekusi tugas-tugas secara bersamaan tanpa memerlukan overhead berat. Anda dapat membuat goroutines dengan kata kuncigo di depan pemanggilan fungsi.
Channels adalah mekanisme komunikasi yang aman antara goroutines. Mereka memungkinkan goroutines untuk berkomunikasi dan berbagi data tanpa terjadi kondisi perlombaan (race condition) atau konflik akses. Channels dapat digunakan untuk mengirim dan menerima data antar goroutines.
Membuat Goroutines
Mari mulai dengan contoh sederhana membuat goroutine:package main
import (
"fmt"
"time"
)
func printNumbers() {
for i := 1; i <= 5; i++ {
fmt.Println(i)
time.Sleep(time.Millisecond * 500)
}
}
func main() {
go printNumbers() // Membuat goroutine baru
time.Sleep(time.Second * 3)
fmt.Println("Selesai")
}
printNumbers() dijalankan sebagai goroutine yang mencetak angka dari 1 hingga 5 dengan jeda waktu. Kode time.Sleep() digunakan untuk memberi waktu agar goroutine memiliki waktu untuk dieksekusi sebelum program berakhir.
Menggunakan Channels
Channels digunakan untuk berkomunikasi antar goroutines. Berikut contoh penggunaannya:package main
import (
"fmt"
)
func writeToChannel(ch chan int) {
for i := 1; i <= 5; i++ {
ch <- i // Mengirim data ke channel
}
close(ch)
}
func main() {
ch := make(chan int) // Membuat channel
go writeToChannel(ch)
for num := range ch {
fmt.Println(num) // Menerima data dari channel
}
}
writeToChannel() mengirim angka ke channel menggunakan operator <-, dan fungsi close(ch) menandakan bahwa pengiriman data selesai. Pada fungsi main(), loop range digunakan untuk menerima data dari channel hingga channel ditutup.
English