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:


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.
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:


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.


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
var
Jika kita mendeklarasikan pointer dengan menggunakan keyword var
ada perbedaan sedikit di penulisan sintaks:

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("----")
}

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("----")
}

Last updated
Was this helpful?