Pointer pada Golang
Pointer pada bahasa GO adalah tipe data yang menyimpan alamat memori dari suatu variabel. Contoh variabel :
- contoh definisi variabel belum ada value
var a string (ket: variabel tipe data string/huruf)
var b int (ket: variabel tipe data int/angka)
- contoh definisi variabel sudah ada value
a := “bahasa” (ket: variabel tipe data string/huruf dengan value bahasa)
b := 1 (ket: variabel tipe data int/bilangan dengan value 1)
dan pastinya masih ada variabel dengan tipe data lainnya.
Kembali ke pointer, pointer dapat ditandai dengan tanda * di depan tipe data, misalnya *int, *string, dll. Penggunaan pointer yaitu untuk mengakses dan mengubah nilai dari variabel yang ditunjuk oleh alamat memori tersebut.
Definisi atau penulisan pointer seperti berikut ini:
var number *int
var name *string
atau bisa juga seperti ini
var number = new(int)
Berikut penjelasan beberapa sintaks pada pointer:
1. reference (&) : untuk mengambil alamat memori dari suatu variabel.
2. dereference (*) : untuk mengambil nilai yang ditunjuk oleh sebuah pointer.
3. new : untuk mengalokasikan memori untuk sebuah variabel dan mengembalikan pointer ke alamat memori yang baru dialokasikan.
Dalam belajar pointer kita harus memahami dulu apa itu pass by value dan apa itu pass by reference.
Pass by value adalah sebuah cara untuk passing parameter ke dalam fungsi atau method, dimana nilai dari parameter akan disalin(copy) ke dalam fungsi atau method. Jika ada perubahan yang dilakukan pada parameter di dalam fungsi atau method, itu tidak akan merubah atau mempengaruhi nilai dari parameter asli yang ada di luar fungsi atau method tersebut.
Pass by reference adalah sebuah cara untuk passing parameter ke dalam fungsi atau method, dimana yang dikirim ke dalam fungsi atau method adalah alamat memori dari parameter. Jika ada perubahan yang dilakukan pada parameter di dalam fungsi atau method, itu akan mempengaruhi nilai dari parameter asli yang ada di luar fungsi atau method tersebut.
Penjelasan dengan sintaks :
Pada gambar sintaks 1 ini terlihat value numberA dan value numberB adalah 4. Dengan addres numberA dan address numberB juga sama yaitu 0xc00001e098. Itu karena penggunaan pointer, sesuai dengan konsep pass by reference.
Pada gambar sintaks 2 ini terlihat value numberA dan value numberB adalah 4. Dan address numbernya berbeda yaitu 0xc00001e098 dan 0xc00001e0b0, itu terjadi karena tidak ada pointer(*) pada deklarasi variabel numberB. Sehingga yang terjadi adalah konsep pass by value.