Pengenalan sync.Once
Fitur ini pada Golang bisa kita gunakan untuk memasikan sebuah function dilakukan eksekusi hanya dalam satu kali saja. Kadang kalau kita sudah memiliki banyak goroutine yang sedang mengakses, maka dengan sync.Once
ini bisa dipastikan hanya goroutine yang memiliki akses pertama yang bisa mengeksekusi function tersebut. Maka jika ada goroutine lain yang sedang berjalan tidak akan melakukan eksekusi dan menghiraukan fungsi tersebu.
Agar lebih jelas dan lebih bisa memahaminya kita langsung saja coba contoh program kodenya dibawah ini.
Implementasi dan sampel sync.Once
Pertama kali kita buat fungsi dan variable global yang nantinya akan kita update value dari variabel global tersebut seperti dibawah ini.
var count = 0
func OnlyOnce() {
count++
}
Setelah itu, kita akan buat main programnya menggunakan sync.WaitGroup
untuk menginisialisasi goroutine dengan jumlah 100 dan melakukan akses ke dalam fungsi yg diatas telah kita buat.
func main() {
var once sync.Once
var wg sync.WaitGroup
for i := 0; i < 100; i++ {
go func() {
wg.Add(1)
once.Do(OnlyOnce)
wg.Done()
}()
}
wg.Wait()
fmt.Println(count)
}
Maka, bagaimana hasil dari output program atau kode kita yang diatas? Hasilnya akan mengeluarkan seperti ini
1
Padahal, proses untuk melakukan akses ke fungsi tersebut sebanyak 100 kali.
Kesimpulan
sync.Once
bagi kita biasanya digunakan untuk mengisi data atau variabel yang memang cukup diakses satu kali dan sisanya bisa kita gunakan data tersebut untuk kebutuhan proses-proses yang lain yang saling terikat. Hal ini untuk mengurangi cost
akses ke dalam fungsi tersebut dan response time yang lebih ringan.
Mengenal Sync Map Pada Golang
Mengenal Sync Cond Pada Golang
Artikel Terhangat
111 Menambahkan Mutation ke Skema gqlgen
10 Oct 2025
108 Menangani Resolver Otomatis dan Manual
10 Oct 2025
106 Menulis Skema `.graphqls` untuk gqlgen
10 Oct 2025
104 Struktur File gqlgen dan Cara Kerjanya
10 Oct 2025

111 Menambahkan Mutation ke Skema gqlgen

108 Menangani Resolver Otomatis dan Manual

106 Menulis Skema `.graphqls` untuk gqlgen
