Fungsi Go — Go

Fungsi di Go Fungsi adalah blok kode yang bisa dipanggil berulang kali. Di Go, fungsi dideklarasikan dengan keyword func. Sintaks Dasar func namaFungsi(param1…

Fungsi di Go

Fungsi adalah blok kode yang bisa dipanggil berulang kali. Di Go, fungsi dideklarasikan dengan keyword func.

Sintaks Dasar

func namaFungsi(param1 tipe1, param2 tipe2) tipeReturn {
    // body
    return nilai
}

Contoh

func tambah(a int, b int) int {
    return a + b
}

// Jika parameter bertipe sama, bisa disingkat:
func kali(a, b int) int {
    return a * b
}

func sapa(nama string) string {
    return "Halo, " + nama + "!"
}

Fungsi tanpa Return

func cetakPesan(pesan string) {
    fmt.Println(pesan)
}

Variadic Function

Fungsi yang menerima jumlah argumen tidak terbatas:

func jumlah(angka ...int) int {
    total := 0
    for _, n := range angka {
        total += n
    }
    return total
}

fmt.Println(jumlah(1, 2, 3, 4, 5)) // 15

First-Class Function

Fungsi bisa disimpan dalam variabel dan dikirim sebagai parameter:

operasi := func(a, b int) int {
    return a + b
}
fmt.Println(operasi(3, 4)) // 7

Named Return Values

Go punya fitur unik: kamu bisa memberi nama pada nilai return di signature fungsi. Variabel itu otomatis dideklarasikan di awal fungsi (dengan zero value) dan bisa langsung dipakai.

func persegi(sisi float64) (luas, keliling float64) {
    luas = sisi * sisi
    keliling = 4 * sisi
    return // "naked return" — otomatis return luas & keliling
}

Kombinasi yang khas di Go: named return + defer untuk error handling dengan context:

func bacaFile(path string) (data []byte, err error) {
    f, err := os.Open(path)
    if err != nil {
        return nil, err
    }
    defer func() {
        if cerr := f.Close(); cerr != nil && err == nil {
            err = cerr // modifikasi named return dari defer
        }
    }()
    return io.ReadAll(f)
}

Kapan pakai named return?

Hindari untuk fungsi pendek — naked return di fungsi panjang bisa bikin bingung. Style guide Go: "eksplisit > implisit" — tulis return luas, keliling lebih aman dibanding return kosong.

Yang akan kamu pelajari