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`.