4. Slice, Map, Struct & Method
Slice: daftar yang bisa bertambah
Section titled “Slice: daftar yang bisa bertambah”port := []int{80, 443}port = append(port, 8080) // [80 443 8080]
fmt.Println(len(port)) // 3fmt.Println(port[0]) // 80fmt.Println(port[1:]) // [443 8080]append mengembalikan slice baru, jadi hasilnya harus disimpan lagi: port = append(port, ...). Indeks di luar batas membuat program panic.
Map: pasangan kunci → nilai
Section titled “Map: pasangan kunci → nilai”ip := map[string]string{ "web": "10.10.10.2", "vps": "10.10.10.1",}ip["db"] = "10.10.10.3" // tambah / ubahdelete(ip, "db") // hapus
alamat, ada := ip["mail"] // "", falseif !ada { fmt.Println("mail belum terdaftar")}Kunci yang tidak ada mengembalikan nilai nol — makanya penghitung bisa langsung hitung[kata]++ tanpa inisialisasi. fmt.Println mencetak map dengan kunci terurut: map[offline:1 online:2].
Struct: tipe buatanmu
Section titled “Struct: tipe buatanmu”type Server struct { Nama string IP string Online bool}
web := Server{Nama: "web", IP: "10.10.10.2", Online: true}fmt.Println(web.Nama) // webweb.Online = falseField yang diawali huruf besar bisa diakses dari paket lain (exported); huruf kecil hanya di paket yang sama. Aturan ini berlaku juga untuk fungsi dan tipe.
Method
Section titled “Method”Method adalah fungsi yang menempel pada sebuah tipe. Tipe pemiliknya (receiver) ditulis sebelum nama:
func (s Server) Status() string { if s.Online { return "online" } return "offline"}
fmt.Println(web.Status())Receiver pointer
Section titled “Receiver pointer”Receiver biasa menerima salinan. Untuk mengubah isi struct aslinya, pakai pointer (*):
func (s *Server) Matikan() { s.Online = false}
servers[0].Matikan() // servers[0] benar-benar berubahLab: Inventaris server: struct & map
Misi 0/5
- Masuk ke
inventarislalu jalankan programnya.Petunjuk
cd inventaris && go run . - Tambahkan server
vps(IP10.10.10.1, online) denganappend. Jumlahnya jadi 3.Petunjuk
servers = append(servers, Server{Nama: "vps", IP: "10.10.10.1", Online: true}) - Buat method
func (s Server) Status() stringlalu cetak statusnya di loop:db 10.10.10.3 offline.Petunjuk
func (s Server) Status() string { if s.Online { return "online" }; return "offline" } — lalu fmt.Println(s.Nama, s.IP, s.Status()) - Hitung jumlah server per status dengan
map[string]int, lalu cetak map-nya.Petunjuk
hitung := map[string]int{} ; di loop: hitung[s.Status()]++ ; setelah loop: fmt.Println(hitung) - Buat method pointer
func (s *Server) Matikan(), panggil untuk server pertama sebelum loop.webharus jadi offline.Petunjuk
func (s *Server) Matikan() { s.Online = false } — lalu servers[0].Matikan() sebelum for
GNU nano ·
Tab = indentasi

