Koleksi lengkap latihan Go untuk mempelajari concurrency, goroutines, channels, dan distributed systems patterns. Proyek ini dirancang sebagai pengalaman pembelajaran interaktif yang mirip dengan Rustlings.
Proyek ini menyediakan 20 exercise yang mencakup semua aspek penting dari concurrency dalam Go, mulai dari konsep dasar hingga pola-pola advanced untuk distributed systems. Setiap exercise dilengkapi dengan:
- π README.md - Penjelasan konsep dan teori
- π§ main.go - Template dengan TODO untuk implementasi
- β
Solution - Implementasi lengkap di folder
solutions/
- 01. Hello Goroutine - Pengenalan goroutines dan concurrency dasar
- 02. WaitGroup - Sinkronisasi goroutines dengan sync.WaitGroup
- 03. Channels - Komunikasi antar goroutines menggunakan channels
- 04. Buffered Channels - Bekerja dengan buffered channels
- 05. Select - Menggunakan select statements untuk operasi non-blocking
- 07. Channel Closing - Menutup channels dan mendeteksi channel yang tertutup
- 08. Mutex - Mencegah race conditions dengan sync.Mutex
- 09. Atomic - Operasi atomic untuk programming lock-free
- 10. Sync Once - Menggunakan sync.Once untuk inisialisasi satu kali
- 11. Producer Consumer - Pola producer-consumer dengan channels
- 12. Worker Pool - Pola worker pool untuk distributed processing
- 13. Fan-out Fan-in - Pola fan-out/fan-in untuk parallel processing
- 14. Pipeline - Data processing pipelines dengan channels
- 15. Context Cancellation - Pola advanced context cancellation
- 16. Context Timeout - Context untuk cancellation dan timeouts
- 17. HTTP Client Concurrency - Concurrent HTTP requests dan worker pools
- 18. Rate Limiting - Pola dan implementasi rate limiting
- 19. Graceful Shutdown - Pola graceful shutdown untuk aplikasi
- 20. Distributed Systems - Pola distributed systems dalam Go
- Go 1.21 atau lebih baru
- Terminal/Command line
git clone <repository-url>
cd go-goroutine
go mod tidygo run main.goPilih exercise yang ingin Anda kerjakan dari menu yang tersedia.
go run main.go 01 # Menjalankan exercise 01go run main.go allgo run main.go watchMode ini akan:
- Memantau perubahan file secara real-time
- Menjalankan exercise secara otomatis saat file disimpan
- Memberikan feedback langsung
- Melanjutkan ke exercise berikutnya saat berhasil
go run main.go verify
# atau
./exercises/verify.shSetiap exercise memiliki README.md yang menjelaskan:
- Konsep yang akan dipelajari
- Contoh penggunaan
- Best practices
- Tips implementasi
Buka file main.go di folder exercise dan implementasikan bagian yang ditandai dengan TODO.
Gunakan go run main.go <nomor> untuk menjalankan exercise Anda.
Jika kesulitan, lihat implementasi lengkap di folder solutions/.
Setelah memahami konsep, lanjutkan ke exercise selanjutnya.
https://gobyexample.com/ adalah sumber pembelajaran Go yang sangat baik dengan contoh-contoh praktis. Topik yang relevan dengan exercise ini:
- Goroutines - Dasar goroutines
- Channels - Komunikasi dengan channels
- Channel Buffering - Buffered channels
- Channel Synchronization - Sinkronisasi
- Channel Directions - Arah channels
- Select - Select statements
- Timeouts - Timeout patterns
- Non-Blocking Channel Operations - Operasi non-blocking
- Closing Channels - Menutup channels
- Range over Channels - Iterasi channels
- Worker Pools - Pola worker pool
- WaitGroups - Sinkronisasi dengan WaitGroup
- Rate Limiting - Pembatasan rate
- Atomic Counters - Operasi atomic
- Mutexes - Mutual exclusion
- Context - Context untuk cancellation
- Go Documentation - Dokumentasi resmi Go
- Effective Go - Best practices Go
- Go Concurrency Patterns - Pola concurrency
Mode watch memberikan pengalaman pembelajaran yang mirip dengan Rustlings:
- Auto-reload saat file berubah
- Feedback real-time
- Progress tracking
- Automatic progression
Sistem verifikasi otomatis untuk memastikan semua solutions berfungsi dengan benar.
Menu interaktif yang memudahkan navigasi antar exercise.
Kontribusi sangat diterima! Silakan:
- Fork repository ini
- Buat branch untuk fitur baru
- Commit perubahan Anda
- Push ke branch
- Buat Pull Request
Proyek ini dilisensikan di bawah MIT License.
- Terinspirasi oleh Rustlings
- Referensi dari Go by Example
- Komunitas Go Indonesia
Selamat belajar Go concurrency! π
Jika Anda menemukan bug atau memiliki saran, silakan buat issue di repository ini.