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
60 Studi Kasus Real-time Notifikasi
08 Aug 2025
82. Test dengan `bufconn` tanpa Network
08 Aug 2025
59 Skema dan Resolver Subscription
08 Aug 2025
81. Unit Test untuk Handler gRPC
08 Aug 2025
79. gRPC Logging Terstruktur dengan Zap
08 Aug 2025

60 Studi Kasus Real-time Notifikasi

82. Test dengan `bufconn` tanpa Network

59 Skema dan Resolver Subscription

81. Unit Test untuk Handler gRPC
