Pointer Golang
Pointer pada Pemrograman GO digunakan ketika kita memanggil fungsi dan digunakan untuk mengambil nilai atau argumen, argumen itu kemudian disalin ke fungsi, untuk contoh silakan ikuti coding berikut :
package main
import (
"fmt"
)
func zero(x int) {
x = 0 }
func main() {
x := 5
zero(x)
fmt.Println(x) // x akan tetap 5
}
import (
"fmt"
)
func zero(x int) {
x = 0 }
func main() {
x := 5
zero(x)
fmt.Println(x) // x akan tetap 5
}
Dalam program diatas fungsi zero tidak akan mengubah variabel x asli di fungsi utama. Tetapi bagaimana jika kita menginginkannya untuk merubah nilai tersebut? Salah satu cara untuk melakukannya adalah dengan menggunakan tipe data khusus yang dikenal sebagai pointer pada coding menjadi 'Ptr', seperti coding berikut ini :
package main
import (
"fmt"
)
func zero(xPtr *int) {
*xPtr = 0
}
func main() {
x := 5
zero(&x)
fmt.Println(x) // x menjadi 0
}
import (
"fmt"
)
func zero(xPtr *int) {
*xPtr = 0
}
func main() {
x := 5
zero(&x)
fmt.Println(x) // x menjadi 0
}
Pointer akan mengambil nilai pada lokasi memori tempat nilai disimpan, dan mengecualikan tempat nilai itu sendiri. Dengan menggunakan pointer (* int) fungsi zero dapat memodifikasi variabel asli dari nilai 5 menjadi 0.
* Juga digunakan untuk variabel penunjuk “dereference”. Dereferencingkan pointer memberi kita akses ke nilai yang ditunjukkan oleh pointer. Ketika kita menulis * xPtr = 0 kita seperti memperintahkan "simpan int 0 di lokasi memori xPtr". Jika kita hanya menulis xPtr = 0 sebagai gantinya kita akan mendapatkan kesalahan kompilator karena xPtr tidak akan dianggap sebagai integer.
Kita menggunakan operator & untuk mencari alamat variabel. &x mengembalikan * int (pointer ke int) karena x adalah int. Ini membuat kita memungkinkan untuk memodifikasi variabel asli. &x di fungsi main dan xPtr di nol merujuk ke lokasi memori yang sama.
New mengambil tipe sebagai argumen, mengalokasikan cukup memori agar sesuai dengan type pada nilai itu dan mengembalikan pointer.
Dalam beberapa bahasa pemrograman ada perbedaan yang signifikan antara penggunaan New dan &.
Pointer jarang digunakan dengan tipe bawaan pada pemrograman Go, tetapi yang akan kita lihat di materi selanjutnya, Pointer sangat berguna ketika dipasangkan dengan struct.
Operator * dan &
Dalam Go, pointer diwakili dengan menggunakan karakter * (tanda bintang) diikuti oleh type nilai yang disimpan. Dalam fungsi nol xPtr adalah pointer ke int.* Juga digunakan untuk variabel penunjuk “dereference”. Dereferencingkan pointer memberi kita akses ke nilai yang ditunjukkan oleh pointer. Ketika kita menulis * xPtr = 0 kita seperti memperintahkan "simpan int 0 di lokasi memori xPtr". Jika kita hanya menulis xPtr = 0 sebagai gantinya kita akan mendapatkan kesalahan kompilator karena xPtr tidak akan dianggap sebagai integer.
Kita menggunakan operator & untuk mencari alamat variabel. &x mengembalikan * int (pointer ke int) karena x adalah int. Ini membuat kita memungkinkan untuk memodifikasi variabel asli. &x di fungsi main dan xPtr di nol merujuk ke lokasi memori yang sama.
New
Cara lain untuk mendapatkan pointer adalah dengan menggunakan fungsi New bawaan, seperti coding berikut :
package main
import (
"fmt"
)
func one(xPtr *int) {
*xPtr = 1 }
func main() {
xPtr := new(int)
one(xPtr)
fmt.Println(*xPtr) // x adalah 1
}
import (
"fmt"
)
func one(xPtr *int) {
*xPtr = 1 }
func main() {
xPtr := new(int)
one(xPtr)
fmt.Println(*xPtr) // x adalah 1
}
| hasil coding |
New mengambil tipe sebagai argumen, mengalokasikan cukup memori agar sesuai dengan type pada nilai itu dan mengembalikan pointer.
Dalam beberapa bahasa pemrograman ada perbedaan yang signifikan antara penggunaan New dan &.
Pointer jarang digunakan dengan tipe bawaan pada pemrograman Go, tetapi yang akan kita lihat di materi selanjutnya, Pointer sangat berguna ketika dipasangkan dengan struct.
MATERI GOLANG
Jika kamu baru di pembelajaran golang, silakan untuk belajar dari materi pertama
Materi ke-1 : Program Pertama
Materi ke-2 : Cara Membaca Program
Materi ke-3 : Type Data
Materi ke-4 : Golang Number
Materi ke-5 : String pada Golang
Materi ke-6 : Boolean Pada Golang
Materi ke-7 : Variable Pada Golang
Materi ke-8 : Cara Memberi Nama Variabel
Materi ke-9 : Scope Pada Golang
Materi ke-10 : Konstanta Pada Golang
Materi ke-11 : Struktur Golang
Materi ke-12 : For Golang
Materi ke-13 : IF Golang
Materi ke-14 : Switch Case Golang
Materi ke-15 : Array Pada Golang
Materi ke-16 : Slice Pada Golang
Materi ke-17 : MAP Golang
Materi ke-18 : Functions Golang
Materi ke-19 : Mengembalikan banyak Nilai dan Variadik
Materi ke-20 : Closure golang
Materi ke-21 : Rekursif Golang
Materi ke-22 : Tunda, Panik, Dan Pulihkan
Materi ke-2 : Cara Membaca Program
Materi ke-3 : Type Data
Materi ke-4 : Golang Number
Materi ke-5 : String pada Golang
Materi ke-6 : Boolean Pada Golang
Materi ke-7 : Variable Pada Golang
Materi ke-8 : Cara Memberi Nama Variabel
Materi ke-9 : Scope Pada Golang
Materi ke-10 : Konstanta Pada Golang
Materi ke-11 : Struktur Golang
Materi ke-12 : For Golang
Materi ke-13 : IF Golang
Materi ke-14 : Switch Case Golang
Materi ke-15 : Array Pada Golang
Materi ke-16 : Slice Pada Golang
Materi ke-17 : MAP Golang
Materi ke-18 : Functions Golang
Materi ke-19 : Mengembalikan banyak Nilai dan Variadik
Materi ke-20 : Closure golang
Materi ke-21 : Rekursif Golang
Materi ke-22 : Tunda, Panik, Dan Pulihkan
Comments