35. Defer & Exit

Defer digunakan untuk mengakhirkan eksekusi sebuah statement. Sedangkan Exit digunakan untuk menghentikan program (ingat, menghentikan program, tidak seperti return yang menghentikan blok kode).

35.1. Penerapan keyword defer

Seperti yang sudah dijelaskan secara singkat di atas, bahwa defer digunakan untuk mengakhirkan eksekusi baris kode. Ketika eksekusi blok sudah selesai, statement yang di defer baru akan dijalankan.

Defer bisa ditempatkan di mana saja, awal maupun akhir blok.

package main

import "fmt"

func main() {
    defer fmt.Println("halo")
    fmt.Println("selamat datang")
}

Output:

Penerapan `defer`

Keyword defer digunakan untuk mengakhirkan statement. Pada kode di atas, fmt.Println("halo") di-defer, hasilnya string "halo" akan muncul setelah "selamat datang".

Statement yang di-defer akan tetap muncul meskipun blok kode diberhentikan ditengah jalan menggunakan return. Contohnya seperti pada kode berikut.

func main() {
    orderSomeFood("pizza")
    orderSomeFood("burger")
}

func orderSomeFood(menu string) {
    defer fmt.Println("Terimakasih, silakan tunggu")
    if menu == "pizza" {
        fmt.Print("Pilihan tepat!", " ")
        fmt.Print("Pizza ditempat kami paling enak!", "\n")
        return
    }

    fmt.Println("Pesanan anda:", menu)
}

Output:

Penerapan `defer` dengan `return`

Info tambahan, ketika ada banyak statement yang di-defer, maka kesemuanya akan dieksekusi di akhir secara berurutan.

35.2. Penerapan Fungsi os.Exit()

Exit digunakan untuk menghentikan program secara paksa pada saat itu juga. Semua statement setelah exit tidak akan di eksekusi, termasuk juga defer.

Fungsi os.Exit() berada dalam package os. Fungsi ini memiliki sebuah parameter bertipe numerik yang wajib diisi. Angka yang dimasukkan akan muncul sebagai exit status ketika program berhenti.

package main

import "fmt"
import "os"

func main() {
    defer fmt.Println("halo")
    os.Exit(1)
    fmt.Println("selamat datang")
}

Meskipun defer fmt.Println("halo") ditempatkan sebelum os.Exit(), statement tersebut tidak akan dieksekusi, karena di-tengah fungsi program dihentikan secara paksa.

Penerapan `exit`

results matching ""

    No results matching ""