Pointer

Pada sesi ini akan di bahas apa itu Pointer pada Go

Pointer adalah suatu variabel yang berisi alamat memori dari suatu nilai atau data.

Perhatikan kode di bawah ini:

Penggunaan pointer pada variabel x
Output menampilkan nilai dan alamat memori tempat nilai tersimpan

Kita bisa lihat bahwa terdapat variabel age yang berisi nilai 26 . Lalu sebuah variabel x yang berisi alamat memori dari nilai variabel age ditandai dengan expression & di depan nama variabel.

age berisi nilai 26

x berisi alamat memori tempat nilai age yaitu 26 tersimpan

Lalu bagaimana jika kita ingin mendapatkan nilai age dari variabel x atau biasa disebut dereferrencing? Kita dapat melakukannya dengan cara menggunakan expression * di depan variabel x seperti di bawah ini:

Mengakses nilai age melalui variabel x
Output program menampilkan nilai dari variabel age

Mengubah nilai dari variabel yang mengakses suatu memori

Masih menggunakan contoh di atas, bagaimana jika kita meng-assign variabel baru pada variabel x ?

Variabel x telah memiliki keterikatan dengan variabel age yaitu variabel x berisi alamat memori dari nilai age . Jadi jika kita mengubah atau meng-assign nilai baru ke dalam variabel x maka akan mengubah juga nilai dari variabel age karena berada di memori yang sama.

Melakukan perubahan nilai pada variabel x yang berpengaruh pada variabel age
Nilai variabel x dan age menjadi 30

Pada kode di atas jika kita ingin meng-assign nilai baru pada variable Pointer, maka harus menambahkan expression * di depan variabel sehingga menjadi *x = 30 .

Menggunakan pointer dengan keyword var

Jika kita mendeklarasikan pointer dengan menggunakan keyword var ada perbedaan sedikit di penulisan sintaks:

Deklarasi variabel pointer menggunakan keyword var

Untuk hasil kode di atas akan sama dengan hasil program sebelumnya. Yang perlu diperhatikan adalah saat mendeklarasikan variabel untuk di jadikan sebagai Pointer harus di tambahkan expression * di depan tipe data.

Penerapan Pointer

Salah satu contoh penerapan Pointer adalah ingin mengakses data yang ada di dalam function. Pada kode di bawah ini terdapat sebuah function change yang mengembalikan nilai baru new ke nilai yang lama old .

package main

import (
	"fmt"
)

func main() {
	// Inisialisasi variabel number
	number := 20
	fmt.Println("Nilai variabel number sebelum memanggil function: ", number)
	fmt.Println("Alamat memori number sebelum memanggil function: ", &number)
	fmt.Println("----")

	change(number, 40)

	fmt.Println("Nilai variabel number setelah pemanggilan function", number)
	fmt.Println("Alamat memori number setelah pemanggilan function", &number)
	fmt.Println("----")
}

func change(old int, new int) {
	old = new
	fmt.Println("Nilai variabel di dalam function: ", old)
	fmt.Println("Alamat memori di dalam function: ", &old)
	fmt.Println("----")
}
Output program menampilkan nilai variabel dari function main dan function change

Untuk bisa mengakses nilai yang sama dengan yang ada di dalam function change , maka kita bisa menggunakan Pointer seperti berikut ini:

package main

import (
	"fmt"
)

func main() {
	number := 20
	fmt.Println("Nilai variabel number sebelum memanggil function: ", number)
	fmt.Println("Alamat memori number sebelum memanggil function: ", &number)
	fmt.Println("----")
	
	// Argumen yang dikirim adalah alamat memori dari number
	change(&number, 40)

	fmt.Println("Nilai variabel number setelah pemanggilan function", number)
	fmt.Println("Alamat memori number setelah pemanggilan function", &number)
	fmt.Println("----")
}

// Untuk menampung alamat memori, harus menggunakan * pada parameter old
func change(old *int, new int) {
	*old = new
	fmt.Println("Nilai variabel di dalam function: ", *old)
	fmt.Println("Alamat memori di dalam function: ", old)
	fmt.Println("----")
}
Output program mengacu pada alamat memori yang sama

Last updated

Was this helpful?