Menu
CoddyTech

Pointer ke Struct

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

Saat bekerja dengan struct, kamu akan sering menggunakan pointer untuk menghindari penyalinan struktur data yang besar dan untuk mengubah struct asli. Pointer ke struct menyimpan alamat memori dari instance struct tersebut.

Kamu bisa membuat pointer struct menggunakan operator & pada struct yang sudah ada, atau menggunakan operator alamat secara langsung dengan literal struct.

type Person struct {
    Name string
    Age  int
}

p := Person{Name: "Alice", Age: 30}
ptr := &p  // pointer ke struct yang sudah ada

// Atau buat langsung
ptr2 := &Person{Name: "Bob", Age: 25}

Go menyediakan cara singkat yang praktis untuk mengakses field struct melalui pointer. Daripada menulis (*ptr).Name, kamu bisa langsung menulis ptr.Name. Go secara otomatis melakukan dereferensi pointer untukmu.

ptr := &Person{Name: "Alice", Age: 30}

// Keduanya bekerja dengan cara yang sama
fmt.Println((*ptr).Name)  // dereferensi eksplisit
fmt.Println(ptr.Name)     // dereferensi otomatis

Dereferensi otomatis ini juga berlaku saat mengubah field. Perubahan melalui pointer memengaruhi struct asli.

p := Person{Name: "Alice", Age: 30}
ptr := &p

ptr.Age = 31           // mengubah nilai asli
fmt.Println(p.Age)     // 31

Pointer struct sangat penting dalam pola OOP Go. Pointer struct memungkinkan method mengubah keadaan receiver, memungkinkan struct berukuran besar diteruskan secara efisien ke fungsi, dan menjadi fondasi untuk membangun struktur data tertaut seperti tree dan list.

challenge icon

Tantangan

Mudah

Mari kita buat sistem rekening bank yang menunjukkan cara pointer struct memungkinkan kamu mengubah data asli secara efisien. Kamu akan membuat rekening yang dapat diperbarui melalui operasi pointer.

Kamu akan menyusun kodemu dalam dua file:

  • account.go: Definisikan struct BankAccount dengan field Owner (string), Balance (float64), dan AccountNumber (string). Buat fungsi bernama NewAccount yang menerima nama pemilik dan nomor rekening sebagai parameter, lalu mengembalikan pointer ke BankAccount baru dengan saldo awal 0. Buat juga fungsi Deposit yang menerima pointer *BankAccount dan sejumlah nilai, lalu menambahkan nilai tersebut ke saldo rekening melalui pointer.
  • main.go: Baca informasi rekening dari input, buat rekening menggunakan fungsi konstruktor (yang mengembalikan pointer), lakukan setoran menggunakan pointer, lalu tampilkan detail rekening untuk memastikan saldo telah diubah.

Input berikut akan diberikan:

  • Baris 1: Nama pemilik
  • Baris 2: Nomor rekening
  • Baris 3: Jumlah setoran (float)

Format output:

Account: [AccountNumber]
Owner: [Owner]
Balance: [Balance]

Contohnya, jika diberikan John Smith, ACC-12345, dan 500.50, outputmu seharusnya:

Account: ACC-12345
Owner: John Smith
Balance: 500.50

Ingat, fungsi NewAccount harus mengembalikan *BankAccount menggunakan operator &, dan fungsi Deposit dapat mengubah saldo secara langsung melalui pointer menggunakan dereferensi otomatis Go (misalnya, account.Balance alih-alih (*account).Balance).

Coba sendiri

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	
	// Baca nama pemilik
	ownerName, _ := reader.ReadString('\n')
	ownerName = strings.TrimSpace(ownerName)
	
	// Baca nomor rekening
	accountNumber, _ := reader.ReadString('\n')
	accountNumber = strings.TrimSpace(accountNumber)
	
	// Baca jumlah setoran
	amountStr, _ := reader.ReadString('\n')
	amountStr = strings.TrimSpace(amountStr)
	amount, _ := strconv.ParseFloat(amountStr, 64)
	
	// TODO: Buat rekening baru menggunakan fungsi NewAccount (mengembalikan pointer)
	
	// TODO: Setorkan uang menggunakan fungsi Deposit dengan pointer rekening
	
	// TODO: Cetak detail rekening dalam format yang diminta:
	// Rekening: [AccountNumber]
	// Pemilik: [Owner]
	// Saldo: [Balance]
}
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