Defer
Dalam bahasa pemrograman Go, defer adalah sebuah statement yang akan menunda pengeksekusian sebuah function, atau anonymous function hingga function terdekatnya selesai dieksekusi atau mengembalikan nilai. Mungkin pengertian ini sedikit membingungkan ya, tapi defer function ini mirip seperti defer yang kita gunakan pada tag script di html.
Berikut ini adalah Misalnya defer function di Golang:
package main
import "fmt"
func hello() {
fmt.Println("Hello World!")
}
func main() {
defer hello()
fmt.Println("Show me")
}
output:
Dari Misalnya di atas, Engkau Bisa Menonton bahwa ketika kita memanggil function diawali dengan defer statement akan dieksekusi setelah function main
selesai dieksekusi. Ini dibuktikan dengan hasil output yang kita dapatkan Yakni text “Show me” akan diprint terlebih dahulu, baru setelah itu text “Hello World!” yang berasal dari function hello
.
Function yang dipanggil menggunakan defer statement juga akan selalu dijalankan meskipun terjadi error. Berikut ini contohnya:
package main
import "fmt"
func hello() {
fmt.Println("Hello World!")
}
func main() {
defer hello()
div := 0 // pembagi 0 biar error
result := 3/div
fmt.Println(result)
}
output:
Hello World!
panic: runtime error: integer divide by zero
goroutine 1 [running]:
main.main()
D:/golang/seri-belajar-folang/defer.go:13 +0x3b
exit status 2
Dari Misalnya tersebut Engkau Bisa Menonton bahwa text “Hello World!” tetap tercetak walaupun terjadi error yang disebabkan pembagian menggunakan Nihil.
Panic
Panic adalah sebuah function yang digunakan Buat menghentikan program. Panic function biasanya akan terpanggil Begitu terjadi error pada program kita. Contohnya seperti error yang sengaja kita buat pada Misalnya defer, terdapat keyword “panic” pada pesan error yang muncul.
Panic function juga Bisa kita panggil secara manual. Hal ini akan Berfaedah misalnya ketika kita melakukan pengecekan terhadap suatu kondisi. Ketika panic function dipanggil, function yang menggunakan statement defer akan tetap dijalankan meskipun program dihentikan.
Berikut ini adalah Misalnya panic function:
package main
import "fmt"
func hello() {
fmt.Println("Hello World!")
}
func main() {
// kode ini akan tetap dieksekusi
defer hello()
// meskipun kita memanggil panic function
panic("Panic dipanggil")
// sedangkan kode ini Bukan akan dieksekusi, karena program berhenti
// setelah panic function dipanggil
fmt.Println("Bukan akan dieksekusi")
}
output:
Hello World!
panic: Panic dipanggil
goroutine 1 [running]:
main.main()
D:/golang/seri-belajar-folang/panic.go:14 +0x49
exit status 2
Recover
Recover adalah sebuah function yang berfungsi Buat menangkap data dari panic function. Recover function Mempunyai kegunaan yang Dekat sama seperti catch pada bahasa pemrogramman lain. Recover digunakan Buat mencegah program terhenti karena terjadi “panic”.
Berikut ini Misalnya recover function:
package main
import "fmt"
func checkSudahMakan(sudahMakan bool) {
if sudahMakan == false {
panic("Ups, Engkau belum makan")
}
fmt.Println("Mantap, sudah makan")
}
func selesai() {
er := recover()
if er != nil {
fmt.Println("Eksis eror:", er)
}
fmt.Println("Selesai")
}
func main() {
defer selesai()
checkSudahMakan(false)
}
output:
Eksis eror: Ups, Engkau belum makan
Selesai
Dari Misalnya tersebut, Engkau Bisa Menonton bahwa kode program kita Bukan terhenti karena terjadi “panic”, tetapi program akan Maju dijalankan dengan menampilkan pesan eror seperti pesan Biasa.
Konsep penggunaan recover ini mirip seperti block try-catch di dalam bahasa pemrograman lainnya.
Misalnya di javascript:
try {
// kode
} catch (error) {
console.error("Eksis error: " + error);
}
Berikutnya: #30: Struct