Untuk membuat goroutine di golang sangatlah sederhana sekali, dan ini sudah built in pada bahasa pemrogaman nya jadi kita tidak perlu menambah package atau menginstall mdule apapun. Yang perlu kita lakukan adlah menambahkan perintah go
sebelum memanggil sebuah function yang akan kita jalankan di sebuah goroutine.
Saat sebuah function kita jalankan dalam goroutine, function tersebut akan berjalan secara asynchronous, artinya tidak akan ditunggu sampai function tersebut selesai. Aplikasi akan berjalan ke kode program selanjutnya tanpa menunggu goroutine yang kita buat selesai, jadi hati-hati saat kita me running go routine tetapi aplikasi nya keburu selesai maka goroutine tersebut tidak akan ditunggu dan akan di kill oleh golang, jadi pastikan kita menunggu go routine selesai.
Membuat goroutine
Pertama buatlah project dengan go module dan beri nama project nya belajar-golang-goroutines
, kemudian buat file baru dengan nama goroutine_test.go
. Pada artikel kali ini kita akan menajlankan goroutine nya menggunakan package test. Nah setelah selesai membuat file baru isikan baris kode berikut di dalam file nya
package belajar_golang_goroutines
import (
"fmt"
"testing"
"time"
)
func RunHelloWorld() {
fmt.Println("Hello World")
}
func TestRunHelloWorld(t *testing.T) {
go RunHelloWorld()
fmt.Println("Ups")
time.Sleep(1 * time.Second)
}

Perhatikan baris kode diatas, dimana kita membuat sebuah function RunHelloWorld
yang akan melakukan print kata Hello World
pada terminal. Kemudian pada baris ke 13 kita juga membuat sebuah unit test dengan nama TestRunHelloWorld
, di dalam unit test ini lah kita akan me running goroutine nya.
Pada baris ke 14 kita me manggil function RunHelloWorld
tetapi berbeda dengan sebelum sebelumnya saat ini kita memanggil function dengan tambahan kata kunci go
di depan function nya, yang artinya function ini akan di jalankan secara asynchronous. Kemudian pada baris 15 kita melakukan print kata Ups
ke terminal untuk memastikan jika Ups
akan di jalankan tanpa menunggu function RunHelloWorld
selesai. Dan terakhir pada baris ke 17 kita akan membuat aplikasi kita menunggu selama 1 detik untuk memastikan goroutine selesai.
Coba jalankan unit test di atas dan perhatikan output nya

Perhatikan output diatas, bisa dilihat jika saat ini Ups
keluar terlebih dahulu sebelum Hello World
, hal ini terjadi karena saat kita membuat goroutine pada function HelloWorld
maka eksekusi function tersebut tidak akan ditunggu sampai selesai dan program akan langsung di jalankan ke baris kode selanjutnya.
Tetapi hati-hati saat menggunakan goroutine, karena jika function yang dijalankan goroutine mengembalikan nilai maka nilai tersebut tidak akan bisa kita ambil.
Goroutine sangat ringan
Goroutine sangat ringan karena untuk 1 goroutine ukuran nya hanya sekitar 2kb saja, karena dia sangat ringan sekali maka kita bisa membuat banyak sekali go routine, kita bisa membuat sebanyak ribuan atau bahkan jutaan tanpa harus takut boros memory. Tidak seperti thread yang ukurannya cukup besar sekitar 1mb, yang mana jika kita membuat ribuan thread maka pasti akan lemot.
Untuk membuktikan goroutine itu ringan maka kita akan mencoba membuat kode program atau function yang akan me running atau membuat 100.000 go routine, kita akan melihat apa yang akan terjadi apakah nanti akan terjadi OOM(Out Of Memory) atau baik-baik saja.
Masih pada file goroutines_test.go
buat function baru seperti berikut
func DisplayNumber(number int) {
fmt.Println("Display :", number)
}
func TestManyGoroutine(t *testing.T) {
for i := 0; i < 100000; i++ {
go DisplayNumber(i)
}
time.Sleep(10 * time.Second)
}

Pada kode diatas kita membuat function dengan nama DisplayNumber
yang akan melakukan print ke terminal dan menampilkan nomor atau angka dari parameter yang dibawa nya. Kemudian kita juga membuat unit test TestManyGoroutine
yang di dalamnya terdapat perulangan yang memanggil DisplayNumber
sebanyak 100.000 kali artinya kita akan membuat goroutine sebanyak 100.000
Coba jalankan test nya dan perhatikan outputnya

Nah bisa dilihat jika unit test selesai di jalankan dan dilakukan looping sebanyak 100.000 kali tanpa ada msalah apapun, tetapi kenapa outputnya tidak berurutan, karena saat running menggunakan goroutine artinya running secara asynchronous walaupun dia running concurent yang seharusnya berurutan tetapi karena device yang saya gunakan multicore jadi dia tidak hanya running secara concurent tetapi juga secara pararel, oleh karena itu output nya bisa berubah-rubah tidak terstruktur atau tidak berurutan.
Penutup
Pada artikel kali ini kita telah belajar tentang cara membuat goroutine pada bahasa pemrogaman go. Dan pada artikel selanjutnya saya akan membahas apa itu channel dan cara membuat channel pada bahasa pemrogaman go.