Pergi - Pointer

Petunjuk di Go mudah dan menyenangkan untuk dipelajari. Beberapa tugas pemrograman Go dilakukan lebih mudah dengan pointer, dan tugas lain, seperti panggilan dengan referensi, tidak dapat dilakukan tanpa menggunakan pointer. Jadi penting untuk mempelajari pointer untuk menjadi programmer Go yang sempurna.

Seperti yang Anda ketahui, setiap variabel adalah lokasi memori dan setiap lokasi memori memiliki alamat yang ditentukan yang dapat diakses menggunakan operator ampersand (&), yang menunjukkan alamat dalam memori. Perhatikan contoh berikut, yang akan mencetak alamat dari variabel yang ditentukan -

package main

import "fmt"

func main() {
   var a int = 10   
   fmt.Printf("Address of a variable: %x\n", &a  )
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

Address of a variable: 10328000

Jadi Anda mengerti apa itu alamat memori dan bagaimana mengaksesnya. Sekarang mari kita lihat apa itu pointer.

Apa Itu Pointer?

SEBUAH pointeradalah variabel yang nilainya adalah alamat variabel lain, yaitu alamat langsung dari lokasi memori. Seperti variabel atau konstanta apa pun, Anda harus mendeklarasikan sebuah pointer sebelum Anda dapat menggunakannya untuk menyimpan alamat variabel apa pun. Bentuk umum dari deklarasi variabel pointer adalah -

var var_name *var-type

Sini, typeadalah tipe dasar pointer; itu harus tipe data C yang valid danvar-nameadalah nama variabel penunjuk. Tanda bintang * yang Anda gunakan untuk menyatakan penunjuk adalah tanda bintang yang sama dengan yang Anda gunakan untuk perkalian. Namun, dalam pernyataan ini tanda bintang digunakan untuk menunjukkan variabel sebagai penunjuk. Berikut adalah deklarasi penunjuk yang valid -

var ip *int        /* pointer to an integer */
var fp *float32    /* pointer to a float */

Tipe data aktual dari nilai semua pointer, baik integer, float, atau lainnya, adalah sama, angka heksadesimal panjang yang mewakili alamat memori. Satu-satunya perbedaan antara pointer dari tipe data yang berbeda adalah tipe data dari variabel atau konstanta yang ditunjuk pointer.

Bagaimana Cara Menggunakan Pointer?

Ada beberapa operasi penting, yang sering kami lakukan dengan pointer: (a) kami mendefinisikan variabel pointer, (b) menetapkan alamat variabel ke pointer, dan (c) mengakses nilai pada alamat yang disimpan dalam variabel pointer .

Semua operasi ini dilakukan dengan menggunakan operator unary * yang mengembalikan nilai variabel yang terletak di alamat yang ditentukan oleh operannya. Contoh berikut menunjukkan cara melakukan operasi ini -

package main

import "fmt"

func main() {
   var a int = 20   /* actual variable declaration */
   var ip *int      /* pointer variable declaration */

   ip = &a  /* store address of a in pointer variable*/

   fmt.Printf("Address of a variable: %x\n", &a  )

   /* address stored in pointer variable */
   fmt.Printf("Address stored in ip variable: %x\n", ip )

   /* access the value using the pointer */
   fmt.Printf("Value of *ip variable: %d\n", *ip )
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

Address of var variable: 10328000
Address stored in ip variable: 10328000
Value of *ip variable: 20

Pointer Nihil di Go

Kompiler Go menetapkan nilai Nil ke variabel pointer jika Anda tidak memiliki alamat yang tepat untuk ditugaskan. Ini dilakukan pada saat deklarasi variabel. Sebuah pointer yang diberi nilai nol disebut anil penunjuk.

Pointer nil adalah konstanta dengan nilai nol yang ditentukan di beberapa pustaka standar. Pertimbangkan program berikut -

package main

import "fmt"

func main() {
   var  ptr *int

   fmt.Printf("The value of ptr is : %x\n", ptr  )
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

The value of ptr is 0

Di sebagian besar sistem operasi, program tidak diizinkan untuk mengakses memori di alamat 0 karena memori tersebut dicadangkan oleh sistem operasi. Bagaimanapun, alamat memori 0 memiliki arti khusus; itu menandakan bahwa penunjuk tidak dimaksudkan untuk menunjuk ke lokasi memori yang dapat diakses. Tetapi secara konvensi, jika sebuah pointer berisi nilai nil (nol), itu dianggap tidak menunjuk ke apa-apa.

Untuk memeriksa pointer nil Anda dapat menggunakan pernyataan if sebagai berikut -

if(ptr != nil)     /* succeeds if p is not nil */
if(ptr == nil)    /* succeeds if p is null */

Pergi Pointer secara Detail

Pointer memiliki banyak konsep tetapi mudah dan sangat penting untuk pemrograman Go. Konsep pointer berikut harus jelas bagi programmer Go -

Sr Tidak Konsep & Deskripsi
1 Pergi - Array pointer

Anda dapat menentukan array untuk menampung sejumlah pointer.

2 Pergi - Arahkan ke penunjuk

Go memungkinkan Anda memiliki penunjuk pada penunjuk dan sebagainya.

3 Meneruskan petunjuk ke fungsi di Go

Meneruskan argumen dengan referensi atau dengan alamat keduanya memungkinkan argumen yang diteruskan diubah dalam fungsi pemanggil oleh fungsi yang dipanggil.