Struct
Membuat tipe sendiri dengan beberapa field.
Struct = tipe buatan sendiri
Struct mengelompokkan beberapa data (field) menjadi satu tipe — seperti formulir dengan beberapa kolom.
type Produk struct {
Nama string
Harga int
Stok int
}
Membuat nilai struct
p1 := Produk{Nama: "Pensil", Harga: 2000, Stok: 10} // dengan nama field (disarankan)
p2 := Produk{"Buku", 15000, 5} // urutan posisi
var p3 Produk // semua field zero value
Mengakses dan mengubah field
fmt.Println(p1.Nama)
p1.Stok = 8
Struct disalin saat di-assign
a := Produk{Nama: "A", Stok: 1}
b := a // salinan
b.Stok = 99
fmt.Println(a.Stok) // 1 (tidak berubah)
Gunakan pointer (&a) untuk berbagi data yang sama.
Pointer ke struct
pp := &Produk{Nama: "Penghapus"}
pp.Harga = 1000 // otomatis (*pp).Harga
Struct di dalam struct & embedding
type Alamat struct{ Kota string }
type Pelanggan struct {
Nama string
Alamat // embedding: p.Kota langsung bisa diakses
}
Struct tag dan JSON
Field bisa diberi tag untuk pengkodean JSON:
type User struct {
Nama string `json:"nama"`
Email string `json:"email,omitempty"`
}
Hanya field berawalan huruf kapital yang ikut di-encode (exported).
Mencetak struct
fmt.Printf("%v", p) → {Pensil 2000 10}, %+v → {Nama:Pensil Harga:2000 Stok:10}.
Slice of struct
Pola paling umum untuk data nyata:
daftar := []Produk{{Nama: "A"}, {Nama: "B"}}
for _, p := range daftar { fmt.Println(p.Nama) }