Penerima Pointer
Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 8 dari 68.
Receiver nilai bekerja dengan salinan struct, sedangkan receiver pointer bekerja langsung dengan instance struct asli. Saat kamu mendefinisikan method dengan receiver pointer, method tersebut dapat mengubah data asli karena menerima pointer ke struct, bukan salinannya.
Untuk membuat receiver pointer, tambahkan tanda bintang * sebelum nama tipe dalam deklarasi receiver:
type Person struct {
Name string
Age int
}
func (p *Person) haveBirthday() {
p.Age++ // Ini mengubah struct asli
}Dalam contoh ini, (p *Person) adalah receiver pointer. Saat kamu memanggil method haveBirthday pada instance Person, method tersebut menerima pointer ke struct asli. Setiap perubahan pada field struct melalui pointer ini akan mengubah data asli secara permanen.
Pointer receiver sangat penting saat method-mu perlu memperbarui field struct, sehingga cocok untuk operasi yang mengubah keadaan datamu.
Tantangan
MudahDalam tantangan ini, kamu akan berlatih membuat method dengan pointer receiver dengan membangun sistem rekening bank sederhana. Kamu akan membuat struct Account dan mendefinisikan method yang dapat mengubah saldo rekening menggunakan pointer receiver.
Kamu akan menerima tiga input:
- String yang mewakili nama pemilik rekening (misalnya,
"John Smith") - String yang mewakili saldo awal rekening (misalnya,
"1000.50") - String yang mewakili jumlah transaksi (misalnya,
"250.75")
Tugasmu adalah:
- Mendefinisikan struct
Accountdengan dua field:Name(string) danBalance(float64) - Membuat method bernama
depositdengan pointer receiver yang menambahkan jumlah yang diberikan ke saldo rekening - Membuat method bernama
withdrawdengan pointer receiver yang mengurangi jumlah yang diberikan dari saldo rekening - Membuat method bernama
displayBalancedengan value receiver yang menampilkan informasi rekening dalam format:"Account: [name], Balance: $[balance]" - Mengurai input untuk membuat instance
Account - Memanggil
displayBalanceuntuk menampilkan saldo awal - Memanggil
depositdengan jumlah transaksi - Memanggil
displayBalanceuntuk menampilkan saldo setelah deposit - Memanggil
withdrawdengan jumlah transaksi - Memanggil
displayBalanceuntuk menampilkan saldo akhir
Saldo harus ditampilkan dengan presisi dua angka desimal. Tantangan ini menunjukkan bagaimana pointer receiver memungkinkan method mengubah data struct asli, berbeda dengan value receiver yang bekerja dengan salinan.
Coba sendiri
package main
import (
"fmt"
"strconv"
)
// TODO: Definisikan struct Account di sini
// TODO: Definisikan method deposit dengan penerima pointer di sini
// TODO: Definisikan method withdraw dengan penerima pointer di sini
// TODO: Definisikan method displayBalance dengan penerima nilai di sini
func main() {
// Baca input
var name string
var initialBalanceStr string
var transactionAmountStr string
fmt.Scanln(&name)
fmt.Scanln(&initialBalanceStr)
fmt.Scanln(&transactionAmountStr)
// Konversi input string ke tipe data yang sesuai
initialBalance, _ := strconv.ParseFloat(initialBalanceStr, 64)
transactionAmount, _ := strconv.ParseFloat(transactionAmountStr, 64)
// TODO: Buat instance Account
// TODO: Tampilkan saldo awal, lakukan deposit, tampilkan saldo, lakukan penarikan, lalu tampilkan saldo akhir
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika & Alur
1Alur Kontrol Lanjutan
switch dengan `fallthrough`Keluar dari Perulangan BersarangMelanjutkan Perulangan TertentuPernyataan `goto`Rangkuman, Kontrol Perulangan Lanjutan4Proyek: Daftar Tugas Sederhana
Menyiapkan ProyekMenambahkan Tugas2Struct dan Method
Mendefinisikan Method pada StructPenerima NilaiPenerima PointerMemilih PenerimaMethod vs FungsiRekap: Perilaku Struct5Map secara Mendalam
Map Berisi StructPointer sebagai Nilai MapMenguji Map NilMembandingkan MapRingkasan: Penghitung Frekuensi Kata8Proyek: Inventaris Sederhana
Gambaran Umum ProyekMemeriksa Stok3Interface (Dasar)
Apa Itu Interface?Mendefinisikan InterfaceMengimplementasikan InterfaceMenggunakan Tipe InterfaceInterface KosongType AssertionType SwitchRingkasan: Bentuk dan PerilakuLatihan sendiri: Compiler Go online