Today I Learned: Shadowed Variables can create Race Condition [Go]

harun nur rasyid
2 min readMar 19, 2021

--

Sedikit cerita hari ini gua dapet sebuah task yang mengharuskan gua untuk membaca 1042 baris lebih kode Go Lang hingga menghabiskan 1 bungkus roko & 1 gelas kopi ditambah permen milkita #candaPermenMilkita ☕️. Nah uNiQue -nya setiap kali gua baca, gak cuma mumet aja yg didapet, pun ada hal menarik yang bisa gua pelajarin dan gua tanyain ke sepuh-sepuh disini bhahaha.

gambar 1.0

Oke sudah cukup basa basinya, mari kita mulai! Nah ketika gua baca baris perbaris source code service tersebut, gua menemukan sebuah keanehan #anjayMabar! Gak deeeeng wakakaka😆 gua nemuin, satu baris kode yang kasih warning loop variable capture by func literal . Naaaah apaan tuh 😰

Setelah gua perhatikan, ternyata ada sebuah goroutine yang dijalankan berulang kali alias looping, oke anggap saja kodenya dibawah ini.

Ekspektasinya adalah, akan ada 5 buah goroutine yang berjalan sehingga akan ada 5 buah output berbeda

Tapi pada kenyataannya output yang dikeluarkan adalah seperti berikut. Terlihat seperti hanya ada satu buah goroutine saja yang di proses 😟

Okeee gak perlu khawatir, ternyata solusinya sederhana bangettt! kita cukup passing variable d alias donation ke anonymous function goroutine tersebut, seperti ini.

Selesaiii, akhirnya masalahnya terselesaikan 😆

Penutup

Dikutip dari Stackoverflow Don’t feel bad it’s a common mistake for new comers in Go, and yes the var d changes for each loop, so your goroutines will use the last process in the slice donations, all you have to do is pass the variable as a parameter to the anonymous function

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

harun nur rasyid
harun nur rasyid

Written by harun nur rasyid

Software Engineer — Writer — Open Source Enthusiast — Startup Enthusiast :)

No responses yet

Write a response