Lompat ke konten utama
←

Go dari Nol

Pelajaran 12 dari 15

Struct, error, dan goroutine

Struct dan method

Setelah pelajaran ini kamu bisa membaca deklarasi struct dan method, membedakan penerima nilai dari penerima pointer, dan memprediksi keluaran %v dan %+v.

±13 menitDiperiksa 5 Okt 2026

Latihan di pelajaran ini butuh akun gratis. Progres, kode, dan catatanmu hanya tersimpan di browser ini. Masuk untuk menyimpannya

Materi

Struct mengelompokkan beberapa field bernama menjadi satu tipe, misalnya type Produk struct dengan field Nama bertipe string dan Harga bertipe int. Nilainya dibuat dengan literal, Produk{Nama: "Kopi", Harga: 18000}, dan field yang tidak disebut berisi nilai nol. Field dibaca dan diisi dengan titik: p.Harga = 20000. Nama yang diawali huruf besar terlihat dari paket lain; huruf kecil hanya terlihat di paketnya sendiri.

Go tidak punya class. Perilaku ditempelkan ke tipe lewat method, yaitu fungsi dengan penerima di depan namanya: func (p Produk) Total(n int) int. Penerima seperti ini disebut penerima nilai. Method menerima salinan struct, sehingga perubahan field di dalamnya hilang begitu method selesai.

Method yang perlu mengubah struct memakai penerima pointer, func (r *Rekening) Setor(n int). Pointer berisi alamat nilai aslinya, sehingga r.Saldo += n mengubah rekening milik pemanggil. Bila a adalah variabel, Go otomatis mengubah a.Setor(50000) menjadi (&a).Setor(50000), jadi cara memanggilnya tidak berubah.

package main

import "fmt"

type Rekening struct {
	Pemilik string
	Saldo   int
}

func (r *Rekening) Setor(n int) {
	r.Saldo += n
}

func main() {
	a := Rekening{Pemilik: "Sari", Saldo: 100000}
	a.Setor(50000)
	fmt.Println(a)         // {Sari 150000}
	fmt.Printf("%+v\n", a) // {Pemilik:Sari Saldo:150000}
}

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 1 dari 3

Apa yang dicetak program ini?

package main

import "fmt"

type Rekening struct {
	Pemilik string
	Saldo   int
}

func (r Rekening) Setor(n int) {
	r.Saldo += n
}

func main() {
	a := Rekening{Pemilik: "Sari", Saldo: 100000}
	a.Setor(50000)
	fmt.Println(a.Saldo)
}
Pilih satu jawaban

Latihan 2 dari 3

Perubahan mana pada program yang sama yang membuatnya mencetak 150000?

package main

import "fmt"

type Rekening struct {
	Pemilik string
	Saldo   int
}

func (r Rekening) Setor(n int) {
	r.Saldo += n
}

func main() {
	a := Rekening{Pemilik: "Sari", Saldo: 100000}
	a.Setor(50000)
	fmt.Println(a.Saldo)
}
Pilih satu jawaban

Latihan 3 dari 3

Apa yang dicetak program ini?

package main

import "fmt"

type Produk struct {
	Nama  string
	Harga int
	Aktif bool
}

func main() {
	p := Produk{Nama: "Teh"}
	fmt.Printf("%+v\n", p)
	fmt.Println(p)
}
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke