Menu
CoddyTech

Pointer receiver vs value receiver

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 8 dari 107.

Method dapat memiliki receiver nilai atau receiver pointer. Receiver nilai bekerja pada salinan struct. Receiver pointer bekerja pada struct asli dan dapat mengubah field-nya.

Receiver nilai: bekerja pada salinan

type Counter struct {
    Count int
}

func (c Counter) GetCount() int {
    return c.Count
}

// Ini TIDAK mengubah yang asli
func (c Counter) IncrementWrong() {
    c.Count++ // Hanya mengubah salinannya!
}

Receiver pointer: mengubah yang asli

// Ini MEMANG mengubah yang asli
func (c *Counter) Increment() {
    c.Count++
}

func (c *Counter) Reset() {
    c.Count = 0
}

Menggunakan keduanya bersama-sama

func main() {
    counter := Counter{Count: 0}

    counter.Increment()
    counter.Increment()
    fmt.Println(counter.GetCount()) // output: 2

    counter.Reset()
    fmt.Println(counter.GetCount()) // output: 0
}

Gunakan receiver nilai ketika method hanya membaca data. Gunakan receiver pointer (*StructName) ketika method perlu mengubah field struct. Go menangani referensi secara otomatis. Kamu memanggil keduanya dengan cara yang sama.

challenge icon

Tantangan

Sedang

Tambahkan method ke struct Wallet menggunakan tipe receiver yang tepat:

  • GetBalance: receiver nilai, mengembalikan saldo saat ini
  • Deposit: receiver pointer, menambahkan jumlah ke saldo
  • Withdraw: receiver pointer, mengurangi jumlah hanya jika dana mencukupi

Coba sendiri

package main

import "fmt"

func main() {
    var balance, deposit, withdraw float64
    fmt.Scan(&balance, &deposit, &withdraw)

    w := Wallet{Balance: balance}

    fmt.Printf("Balance: %.2f\n", w.GetBalance())

    w.Deposit(deposit)
    fmt.Printf("After deposit: %.2f\n", w.GetBalance())

    w.Withdraw(withdraw)
    fmt.Printf("After withdrawal: %.2f\n", w.GetBalance())

    fmt.Printf("Final balance: %.2f\n", w.GetBalance())
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Go online