Closure Di Golang
Closure adalah kombinasi dari function yang dibundle Serempak dengan scope di sekitarnya. Di dalam closure, kita Bisa mengakses scope yang berada di luar function dari dalam function itu sendiri karena merupakan satu scope yang sama. Ketika menggunakan closure, Anda harus berhati-hati agar terhindar dari ketidaksengajaan merubah data diluar function. Secara sederhana, closure adalah function yang berada di dalam function.
Misalnya Closure
package main
import "fmt"
func main() {
name := "Rizky Kurniawan"
printName := func() {
fmt.Println(name)
}
printName()
}
output:
Dari Misalnya diatas, Anda Bisa Memperhatikan bahwa kita Membikin sebuah function di dalam function main
. Di dalamnya, kita memprint nilai dari variabel name
yang berada diluar function. Keadaan inilah yang disebut sebagai closure.
Hati-hati Ketika Menggunakan Closure
Seperti penjelasan sebelumnya, kita harus berhati-hati ketika menggunakan closure. Karena kita Bisa mengakses variabel yang berada diluar function (seperti Ketika mengakses variable name
), maka kita Bisa saja Kagak sengaja merubah nilai dari variable tersebut. Pada beberapa kasus, hal ini akan berbahaya. Contohnya sebagai berikut:
package main
import "fmt"
func main() {
name := "Rizky Kurniawan"
printName := func() {
// anggap saja Kagak sengaja merubah isi variabel name
name = "Tony Stark"
fmt.Println(name)
}
printName()
}
output:
Nah itu dia, dari Misalnya tersebut dapat Anda lihat bahwa kita Bisa mengganti nilai variable name
dari dalam function printName
. Maka, ketika kita print yang ditampilkan adalah nama Kagak sengaja kita ubah.
Perlu Anda ketahui bahwa perubahan ini Kagak hanya berlaku di dalam function printName
saja, tetapi juga berlaku di luar function printName
setelah function tersebut di panggil. Kalau Anda mencoba memprint variabel name
di luar function printName
setelah pemanggilan function, maka nilainya akan tetap seperti setelah dirubah Adalah Tony Stark
.
package main
import "fmt"
func main() {
name := "Rizky Kurniawan"
printName := func() {
// anggap saja Kagak sengaja merubah isi variabel name
name = "Tony Stark"
fmt.Println("Di dalam function printName")
fmt.Println(name)
}
// kita panggil function-nya
printName()
fmt.Println("Di luar function printName")
fmt.Println(name)
}
output:
Di dalam function printName
Tony Stark
Di luar function printName
Tony Stark
Berikutnya: #29: Defer, Panic, & Recover