Selalu ingin mencoba hal - hal yang baru meski penuh resiko dan tantangan yang sulit. "Kain kafan tidak berkantung".

Golang tutorial indonesia – Defer,panic dan recover

0
Degananda.com -

Defer

Golang memiliki satu fungsi yang spesial yakni defer. Kegunaan dari defer adalah mengeksekusi suatu fungsi ketika fungsi yang lain telah selesai dijalankan. Defer sangat berguna dalam menghadapi berbagai fungsi yang berjalan bersama-sama namun memerlukan beberapa fungsi yang berjalan secara sekuensial.

Contohnya kita memiliki fungsi A dan fungsi B. Jika kita inggin fungsi B dijalankan setelah proses di fungsi A ini selesai maka kita harus menggunakan defer. Defer ini bekerja seperti mekanisme scheduling yang melihat status (selesai atau belum selesai) dijalankannya fungsi lainnya.

Perhatikan kode dibawah ini untuk mengetahui tentang mekanisme penggunaan defer

package main

import (
	"fmt"
)

func main() {
	defer satu()
	dua()
}

func satu() {
	fmt.Println("satu")
}

func dua() {
	fmt.Println("dua")
}

ketika kode diatas dijalankan maka

  1. fungsi dua akan dieksekusi terlebih dahulu
  2. Setelah fungsi dua dieksekusi maka fungsi pertama baru dieksekusi

tampilkan pada konsol jika kode diatas dijalankan

Implementasi defer

Perhatikan kode dibawah ini

package main

import (
	"os"
)

func main() {
	file, _ := os.Open("./dega.txt")
	defer file.Close()
}

ketika kita membuka file maka fungsi file.Close() akan dieksekusi setelah file tersebut dibuka untuk mengurangi beban memory. Ini adalah kegunaan dari defer.

Panic & Recover

panic atau dalam bahasa indonesia adalah panik yang berarti kondisi dimana kita sedang kebingungan terkait dengan suatu kondisi. Pada pemrograman golang panic adalah fungsi yang dapat melakukan raise atau membuat runtime error atau mudahnya untuk membuat error.

Sedangkan recover memiliki fungsi yang kebalikan dengan panic yakni menghilangkan panic / runtime error

package main

func main() {
	panic("something wrong...")
}

kode diatas jika dieksekusi akan menghasilkan runtime error

untuk dapat menggunakan recover maka kita dapat mengkombinasikannya dengan defer. Recover akan dieksekusi setelah runtime error diraise oleh sistem

package main

import (
	"fmt"
)

func main() {
	defer func() {
		pesanError := recover()
		fmt.Println(pesanError)
	}() // () ini digunakan untuk menginvoke fungsi
	panic("something wrong...")
}

kode diatas jika dijalankan akan menghasilkan tampilan seperti ini pada konsol

runtime error yang diraise tidak ditampilkan pada konsol karena telah “direcover”. tanpa penggunaan defer recover ini tidak dapat berjalan. Secara default fungsi recover() mereturn nilai dari panic.