Struct
Cetakan data yang mengelompokkan nilai bertipe berbeda.
Pahami konsepnya
Struct mengelompokkan beberapa nilai bertipe berbeda di bawah satu nama — cetakan data untuk entitas nyata seperti siswa, produk, atau pesanan. Definisikan dengan type Nama struct, buat nilainya dengan Nama{field: nilai}, dan akses isinya dengan tanda titik.
Bentuk-bentuk pendukung: struct anonim untuk data sekali pakai, struct bersarang (field berupa struct lain), dan embedded struct — menuliskan tipe tanpa nama field menjadikannya "menyatu", sehingga field serta method-nya bisa diakses langsung dari luar. Inilah cara Go menggantikan pewarisan (inheritance): komposisi, bukan hirarki.
Struct adalah nilai: penugasan dan pengiriman ke fungsi menyalin isinya. Karena itu struct besar biasa dilewatkan sebagai pointer. Saat dicetak dengan %v, seluruh field tampil; format %+v menambahkan nama fieldnya.
Coba contoh kode
package main
import "fmt"
type Alamat struct {
Kota string
KodePos string
}
type Siswa struct {
Nama string
Poin int
Tinggal Alamat
}
func main() {
ari := Siswa{Nama: "Ari", Poin: 10, Tinggal: Alamat{Kota: "Bandung", KodePos: "40115"}}
fmt.Printf("%+v\n", ari)
}Struct bersarang: field Tinggal berupa struct Alamat, diakses berantai ari.Tinggal.Kota. %+v mencetak semua field beserta namanya — sangat berguna untuk melihat isi struct saat debugging.
Embedded struct
type Pengguna struct {
Email string
}
type Admin struct {
Pengguna // embedded: tanpa nama field
Level int
}
func main() {
a := Admin{Pengguna: Pengguna{Email: "ops@site.dev"}, Level: 5}
fmt.Println(a.Email) // akses langsung, bukan a.Pengguna.Email
}Karena Pengguna ditanam tanpa nama field, isinya "menyatu" dengan Admin — a.Email bekerja seolah field itu milik Admin sendiri. Method pada tipe yang ditanam juga ikut terwariskan; inilah komposisi ala Go.
Struct anonim
func main() {
hasil := struct {
Nama string
Skor int
}{Nama: "Ari", Skor: 95}
fmt.Println(hasil.Nama, hasil.Skor)
}Struct anonim dideklarasikan dan diisi dalam satu langkah — pas untuk data sementara yang tidak akan dipakai ulang, misalnya bentuk respons sekali cetak. Untuk data yang muncul berkali-kali, selalu definisikan tipe bernama.
Latihan singkat
Uji: tanam Pemasok ke dalam Produk lalu cetak — program harus mencetak persis `Kopi dari PT Jaya`.