← Kembali ke kursus
Pelajaran kursus · Go
Pelajaran 21

Properti public dan private

Huruf besar-kecil menentukan siapa yang boleh mengakses.

Pahami konsepnya

Go tidak punya kata kunci public atau private. Penggantinya sederhana: identifier yang berawalan huruf KAPITAL diekspor (public) — bisa diakses dari paket mana pun; huruf kecil tidak diekspor (private) — hanya hidup di dalam paketnya.

Aturan ini berlaku seragam untuk semuanya: field struct, method, fungsi, tipe, konstanta, sampai variabel paket. fmt.Println diekspor; fungsi internal fmt seperti pencetaknya tidak. Saat mengimpor math, kamu boleh memakai math.Pi tapi bukan math internals-nya.

Konsekuensinya nyata saat merancang paket sendiri: nama yang diekspor adalah API publikmu — ubah hurufnya dan kode pemakai putus. Kebiasaan baik: ekspor sesedikit mungkin, perluas belakangan. Sebuah struct dengan field privat dijadikan aman lewat method pembaca/penulis (getter/setter) — di Go konvensinya getter tanpa awalan Get: s.Nama().

Coba contoh kode

// ---- berkas: hitung/hitung.go ----
package hitung

// Luas diekspor: publik untuk siapa saja.
func Luas(r float64) float64 {
    return pi() * r * r
}

// pi tidak diekspor: rahasia paket ini.
func pi() float64 {
    return 3.14159
}

// ---- berkas: main.go ----
package main

import (
    "fmt"
    "hitung"
)

func main() {
    fmt.Println(hitung.Luas(7)) // 153.93791
}

Dari luar paket hitung, hanya Luas yang terlihat — pi tersembunyi meski fungsinya ikut terpakai di dalam. Coba panggil hitung.pi() dari main: kompilator menolak karena tidak diekspor. Pemisahan publik/privat se-celah ini membuat API paket tetap ramping.

Latihan singkat

Uji: panggil Luas(7) dari main — program harus mencetak persis `153.93791`.