
Concurrency merupakan salah satu fitur inti yang membedakan Go dari bahasa pemrograman lainnya. Dengan concurrency, kamu dapat menjalankan beberapa tugas secara bersamaan, yang memungkinkan aplikasi Anda untuk melakukan lebih banyak pekerjaan dalam waktu yang sama. Dalam Go, ini dicapai melalui goroutines dan channels. Dalam artikel ini, kita akan menjelajahi konsep-konsep dasar dari concurrency di Go.
Goroutines: Ringan dan Efisien
Goroutines adalah salah satu fitur paling kuat dalam Go. Mereka merupakan unit eksekusi ringan yang dikelola oleh runtime Go, yang memungkinkan Anda untuk menjalankan fungsi atau method secara konkuren tanpa memerlukan banyak overhead. Inilah contoh sederhana penggunaan goroutines:

Dalam contoh ini, kita menjalankan fungsi sayHello() sebagai goroutine dengan menambahkan kata kunci go sebelum pemanggilan fungsi tersebut. Ini memungkinkan kita untuk menjalankan fungsi sayHello() secara konkuren dengan fungsi main().
Channels: Komunikasi Antar Goroutines
Channels adalah mekanisme yang digunakan untuk melakukan komunikasi antar goroutines di Go. Mereka memungkinkan goroutines untuk bertukar data satu sama lain dengan aman dan terkoordinasi. Berikut adalah contoh sederhana penggunaan channel:

Dalam contoh ini, kita membuat sebuah channel ch yang dapat mengirim dan menerima data bertipe string. Goroutine anonim yang kita jalankan mengirimkan pesan "Hello" ke channel tersebut dan di dalam fungsi main(), kita membaca pesan tersebut dari channel.
Kombinasi Goroutines dan Channels
Salah satu kekuatan utama Go dalam concurrency adalah kemampuannya untuk menggabungkan goroutines dengan channels. Ini memungkinkan kamu untuk membuat pola desain seperti fan-in, fan-out dan pipeline, yang dapat meningkatkan kinerja dan skalabilitas aplikasimu. Contoh di bawah ini menunjukkan bagaimana kamu dapat menggunakan goroutines dan channels untuk melakukan pengolahan data secara paralel:

Dalam contoh ini, kita memiliki beberapa goroutines yang masing-masing memproses pekerjaan yang diberikan dan mengirimkan hasilnya kembali melalui channel results.
Kesimpulan
Dengan menggunakan goroutines dan channels, Go memudahkan untuk mengembangkan aplikasi yang paralel dan efisien secara sederhana. Meskipun concurrency bisa menjadi konsep yang kompleks, Go membuatnya menjadi lebih mudah dipahami dan dikelola.
Semoga dengan pemahaman Go, kamu lebih siap untuk menghadapi tantangan dalam pengembangan aplikasi Go yang lebih kompleks.
Jangan ragu untuk terus belajar dan menjelajahi fitur-fitur menarik dalam bahasa Go! Dan untuk pengalaman belajar yang lebih mendalam, yuk bergabung di Build with Angga dan kembangkan keterampilan pemrograman Go-mu bersama komunitas yang solid dan dukungan dari instruktur ahli.
Mari bergabung dan berkembang bersama-sama! 🚀 BuildWithAngga