Pointer memiliki banyak konsep tetapi mudah dan semuanya sangat penting untuk pemrograman Go. Dalam pemabahasan Fungsi Pointer Bahasa Pemrograman Golang, go mempunyai tiga Konsep. Konsep pointer berikut harus jelas bagi programmer Go
Go – Array of pointers
Sebelum kita memahami konsep array pointer, mari kita perhatikan contoh berikut, yang memanfaatkan array 3 integer –
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package main import "fmt" const MAX int = 3 func main() { a := []int{10,100,200} var i int for i = 0; i < MAX; i++ { fmt.Printf("Value of a[%d] = %d\n", i, a[i] ) } } |
Ketika kode di atas dikompilasi dan dieksekusi, ia menghasilkan hasil sebagai berikut –
|
1 2 3 |
Value of a[0] = 10 Value of a[1] = 100 Value of a2] = 200 |
Mungkin ada situasi ketika kita ingin mempertahankan array, yang dapat menyimpan pointer ke int atau string atau tipe data lain yang tersedia. Pernyataan berikut mendeklarasikan array pointer ke integer –
|
1 |
var ptr [MAX]*int; |
Ini menyatakan ptr sebagai array MAX integer pointer. Jadi, setiap elemen dalam ptr, sekarang memegang pointer ke nilai int. Contoh berikut menggunakan tiga bilangan bulat, yang akan disimpan dalam array pointer sebagai berikut –
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package main import "fmt" const MAX int = 3 func main() { a := []int{10,100,200} var i int var ptr [MAX]*int; for i = 0; i < MAX; i++ { ptr[i] = &a[i] /* assign the address of integer. */ } for i = 0; i < MAX; i++ { fmt.Printf("Value of a[%d] = %d\n", i,*ptr[i] ) } } |
Ketika kode di atas dikompilasi dan dieksekusi, ia menghasilkan hasil sebagai berikut –
|
1 2 3 |
Value of a[0] = 10 Value of a[1] = 100 Value of a[2] = 200 |
Go – Pointer to pointer
Pointer to pointer adalah bentuk rantai pointer. Biasanya, pointer berisi alamat variabel. Ketika kita mendefinisikan sebuah pointer ke sebuah pointer, pointer pertama berisi alamat dari pointer kedua, yang menunjuk ke lokasi yang berisi nilai aktual seperti yang ditunjukkan di bawah ini.

Variabel yang merupakan pointer ke pointer harus dinyatakan seperti itu. Ini dilakukan dengan menempatkan tanda bintang tambahan di depan namanya. Sebagai contoh, pernyataan berikut menyatakan pointer ke pointer dari tipe int –
|
1 |
var ptr **int; |
Ketika nilai target secara tidak langsung ditunjukkan oleh pointer ke pointer, mengakses nilai tersebut mengharuskan operator tanda bintang diterapkan dua kali, seperti yang ditunjukkan dalam contoh berikut –
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package main import "fmt" func main() { var a int var ptr *int var pptr **int a = 3000 /* take the address of var */ ptr = &a /* take the address of ptr using address of operator & */ pptr = &ptr /* take the value using pptr */ fmt.Printf("Value of a = %d\n", a ) fmt.Printf("Value available at *ptr = %d\n", *ptr ) fmt.Printf("Value available at **pptr = %d\n", **pptr) } |
Ketika kode di atas dikompilasi dan dieksekusi, ia menghasilkan hasil sebagai berikut –
|
1 2 3 |
Value of var = 3000 Value available at *ptr = 3000 Value available at **pptr = 3000 |
Go – Passing pointers to functions
Bahasa pemrograman Go memungkinkan Anda untuk melewatkan sebuah pointer ke suatu fungsi. Untuk melakukannya, cukup mendeklarasikan parameter fungsi sebagai tipe pointer.
Dalam contoh berikut, kami meneruskan dua petunjuk ke suatu fungsi dan mengubah nilai di dalam fungsi yang mencerminkan kembali pada fungsi panggilan –
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
package main import "fmt" func main() { /* local variable definition */ var a int = 100 var b int = 200 fmt.Printf("Before swap, value of a : %d\n", a ) fmt.Printf("Before swap, value of b : %d\n", b ) /* calling a function to swap the values. * &a indicates pointer to a ie. address of variable a and * &b indicates pointer to b ie. address of variable b. */ swap(&a, &b); fmt.Printf("After swap, value of a : %d\n", a ) fmt.Printf("After swap, value of b : %d\n", b ) } func swap(x *int, y *int) { var temp int temp = *x /* save the value at address x */ *x = *y /* put y into x */ *y = temp /* put temp into y */ } |
Ketika kode di atas dikompilasi dan dieksekusi, ia menghasilkan hasil sebagai berikut –
|
1 2 3 4 |
Before swap, value of a :100 Before swap, value of b :200 After swap, value of a :200 After swap, value of b :100 |
Oke itulah tadi pembahasan saya tentangFungsi Pointer Bahasa Pemrograman Golang Part 3, semoga bermanfaat.