0Pricing
Go Academy · Pelajaran

Metode pada Struct

Receiver nilai dibandingkan receiver pointer

Metode pada Struct adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Apa Itu Metode

Metode adalah fungsi dengan argumen penerima. Penerima berada di antara kata kunci func dan nama metode, sehingga mengikat fungsi ke suatu tipe.

Penerima Nilai

Penerima nilai menerima salinan struktur. Gunakan saat metode tidak perlu mengubah keadaan:

package main
import "fmt"

type Circle struct{ Radius float64 }

func (c Circle) Area() float64 {
    return 3.14159 * c.Radius * c.Radius
}

func main() {
    c := Circle{Radius: 5}
    fmt.Printf("%.2f\n", c.Area()) // 78.54
}

Penerima Penunjuk

Penerima penunjuk memungkinkan metode mengubah struktur. Lebih efisien untuk struktur besar:

package main
import "fmt"

type Counter struct{ N int }

func (c *Counter) Increment() { c.N++ }
func (c *Counter) Reset()     { c.N = 0 }

func main() {
    c := Counter{}
    c.Increment(); c.Increment()
    fmt.Println(c.N) // 2
    c.Reset()
    fmt.Println(c.N) // 0
}

Kapan Menggunakan Penerima Penunjuk

Gunakan penerima penunjuk saat:

  • Metode perlu mengubah penerima
  • Strukturnya besar, sehingga menghindari penyalinan
  • Konsistensi diperlukan: jika salah satu metode memiliki penerima penunjuk, semuanya harus demikian

Gunakan penerima nilai saat strukturnya kecil dan metode hanya membaca data.

Ekspresi dan Nilai Metode

Metode dapat digunakan sebagai nilai kelas satu:

package main
import "fmt"

type Adder struct{ Base int }

func (a Adder) Add(n int) int { return a.Base + n }

func main() {
    a := Adder{Base: 10}
    fn := a.Add          // method value — bound to a
    fmt.Println(fn(5))   // 15
}

Metode pada Tipe Nonstruktur

Anda dapat menentukan metode pada tipe bernama apa pun dalam paket yang sama, bukan hanya struktur:

package main
import "fmt"

type Celsius float64

func (c Celsius) ToFahrenheit() float64 {
    return float64(c)*9/5 + 32
}

func main() {
    t := Celsius(100)
    fmt.Println(t.ToFahrenheit()) // 212
}

Dereferensi Penunjuk Otomatis

Go otomatis mengambil alamat atau melakukan dereferensi saat memanggil metode. Anda tidak perlu menulis (&c).Method() secara manual:

package main
import "fmt"

type Box struct{ Val int }

func (b *Box) Double() { b.Val *= 2 }

func main() {
    b := Box{Val: 5}
    b.Double()           // Go auto-takes address
    fmt.Println(b.Val)   // 10
}

Merangkai Metode

Kembalikan penunjuk penerima agar perangkaian metode dapat dilakukan (pola pembangun):

package main
import "fmt"

type Builder struct{ result string }

func (b *Builder) Add(s string) *Builder {
    b.result += s
    return b
}
func (b *Builder) Build() string { return b.result }

func main() {
    s := (&Builder{}).Add("Hello").Add(", ").Add("World").Build()
    fmt.Println(s)
}

Metode Teks (fmt.Stringer)

Implementasikan metode String() string untuk mengatur cara suatu tipe dicetak:

package main
import "fmt"

type Point struct{ X, Y int }

func (p Point) String() string {
    return fmt.Sprintf("(%d, %d)", p.X, p.Y)
}

func main() {
    p := Point{3, 4}
    fmt.Println(p) // (3, 4)
}

Penerima Penunjuk nil

Metode dengan penerima penunjuk dapat dipanggil pada penunjuk bernilai nil—berguna untuk perilaku bawaan:

package main
import "fmt"

type Node struct{ Val int }

func (n *Node) Value() int {
    if n == nil { return 0 }
    return n.Val
}

func main() {
    var n *Node
    fmt.Println(n.Value()) // 0
}

Prinsip Konsistensi

Dalam pustaka standar Go dan Go idiomatis, semua metode pada suatu tipe menggunakan jenis penerima yang sama—semuanya penunjuk atau semuanya nilai. Mencampurnya dapat menyebabkan bug tersembunyi pada antarmuka.

Pemeriksaan Singkat

Jenis penerima apa yang memungkinkan metode mengubah anggota struktur?

Ringkasan: Metode

Hal-hal penting:

  • Metode memiliki penerima di antara func dan nama metode
  • Penerima nilai: hanya membaca, untuk struktur kecil
  • Penerima penunjuk: perubahan, struktur besar, dan konsistensi
  • Go melakukan dereferensi otomatis—tidak perlu menulis (&v).Method()
  • Implementasikan String() string untuk pencetakan khusus

Latihan

Tentukan struktur BankAccount dengan anggota Balance float64. Tambahkan metode penerima penunjuk Deposit dan Withdraw, serta metode penerima nilai String().

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Metode pada Struct” gratis?

Ya — teks lengkap “Metode pada Struct” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Metode pada Struct”?

Receiver nilai dibandingkan receiver pointer Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Metode pada Struct” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mendefinisikan dan Menggunakan Struct
  2. Metode pada Struct
  3. Pola Konstruktor
  4. Struct Anonim dan Komposisi
← Kembali ke Go Academy