Lompat ke konten utama
←

Go dari Nol

Pelajaran 14 dari 15

Struct, error, dan goroutine

Goroutine dan channel (konsep)

Setelah pelajaran ini kamu bisa menjelaskan apa yang dijamin saat sebuah fungsi dijalankan dengan go, membaca kirim-terima pada channel tanpa buffer, dan mengenali deadlock.

±13 menitDiperiksa 5 Okt 2026

Latihan di pelajaran ini butuh akun gratis. Progres, kode, dan catatanmu hanya tersimpan di browser ini. Masuk untuk menyimpannya

Materi

Goroutine adalah fungsi yang berjalan bersamaan dengan bagian program lainnya. Menulis go sebelum pemanggilan fungsi, go kirimEmail(daftar), memulai goroutine baru dan langsung lanjut ke baris berikutnya tanpa menunggu fungsinya selesai. Goroutine jauh lebih ringan daripada thread sistem operasi, sehingga satu program bisa menjalankan ribuan goroutine.

Program berhenti begitu fungsi main selesai, tanpa menunggu goroutine lain. Karena itu goroutine perlu cara memberi tahu bahwa pekerjaannya selesai. Alat utamanya channel: ch := make(chan int) membuat saluran untuk nilai int, ch <- 5 mengirim, dan x := <-ch menerima. Pada channel tanpa buffer, pengirim menunggu sampai ada penerima dan sebaliknya, sehingga setiap kiriman menjadi titik temu dua goroutine.

Bila semua goroutine sedang menunggu dan tidak ada yang bisa melanjutkan, runtime menghentikan program dengan fatal error: all goroutines are asleep - deadlock!. Contoh paling sederhana: main mengirim ke channel tanpa buffer padahal tidak ada goroutine lain yang menerima. Untuk menunggu sekelompok goroutine tanpa mengirim nilai, paket sync menyediakan WaitGroup.

package main

import "fmt"

func kuadrat(n int, hasil chan int) {
	hasil <- n * n
}

func main() {
	hasil := make(chan int)
	go kuadrat(4, hasil)
	fmt.Println(<-hasil) // 16: main menunggu sampai nilai terkirim
}

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 1 dari 3

Apa yang dijamin terjadi saat program ini dijalankan?

package main

import "fmt"

func main() {
	go fmt.Println("dari goroutine")
	fmt.Println("selesai")
}
Pilih satu jawaban

Latihan 2 dari 3

Apa yang terjadi saat program ini dijalankan dengan go run?

package main

import "fmt"

func main() {
	ch := make(chan int)
	ch <- 5
	fmt.Println(<-ch)
}
Pilih satu jawaban

Latihan 3 dari 3

Apa yang dicetak program ini?

package main

import "fmt"

func jumlahkan(bagian []int, hasil chan int) {
	total := 0
	for _, v := range bagian {
		total += v
	}
	hasil <- total
}

func main() {
	penjualan := []int{120, 80, 200, 150, 90, 60}
	hasil := make(chan int)
	go jumlahkan(penjualan[:3], hasil)
	go jumlahkan(penjualan[3:], hasil)
	a, b := <-hasil, <-hasil
	fmt.Println(a + b)
}
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke

Tampilkan 1 lagi