Rumah >pembangunan bahagian belakang >Golang >Adakah golang mempunyai penunjuk?

Adakah golang mempunyai penunjuk?

青灯夜游
青灯夜游asal
2022-11-23 10:43:332193semak imbas

golang ada penunjuk. Bahasa Go membekalkan pengaturcara dengan keupayaan untuk mengawal penunjuk struktur data Sokongannya untuk penunjuk adalah antara bahasa Java dan bahasa C/C Ia tidak membatalkan keupayaan kod untuk mengendalikan penunjuk secara langsung seperti Java, dan juga tidak mengelak Ia menyelesaikannya masalah keselamatan dan kebolehpercayaan yang disebabkan oleh penyalahgunaan penunjuk dalam C/C. Penunjuk boleh dibahagikan kepada dua konsep teras dalam bahasa Go: 1. Penunjuk jenis, yang membolehkan data jenis penunjuk ini diubah suai 2. Slice, yang terdiri daripada penunjuk asal yang menunjuk kepada elemen permulaan, bilangan elemen , dan kapasiti.

Adakah golang mempunyai penunjuk?

Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.

Tidak seperti bahasa pengaturcaraan seperti Java dan .NET, bahasa Go menyediakan pengaturcara dengan keupayaan untuk mengawal penunjuk struktur data, tetapi ia tidak boleh melaksanakan operasi penunjuk. Bahasa Go membolehkan anda mengawal struktur data koleksi tertentu, bilangan peruntukan dan corak capaian memori, yang sangat penting untuk membina sistem yang berfungsi dengan baik. Kesan penunjuk pada prestasi adalah jelas jika anda ingin melakukan pengaturcaraan sistem, sistem pengendalian atau aplikasi rangkaian, penunjuk adalah bahagian yang sangat diperlukan.

Sokongan bahasa Go untuk penunjuk adalah antara bahasa Java dan bahasa C/C Ia tidak membatalkan keupayaan kod untuk mengendalikan penunjuk secara langsung seperti Java, dan ia juga mengelakkan keperluan untuk manipulasi langsung penunjuk. dalam C/C. Isu keselamatan dan kebolehpercayaan yang disebabkan oleh penyalahgunaan penunjuk.

Penunjuk (penunjuk) boleh dibahagikan kepada dua konsep teras dalam bahasa Go:

  • penunjuk taip, membenarkan jenis penuding ini Untuk mengubah suai data, anda boleh terus menggunakan penunjuk untuk memindahkan data tanpa menyalin data penunjuk jenis tidak boleh melakukan offset dan operasi.

  • Slice, yang terdiri daripada penunjuk mentah kepada elemen permulaan, bilangan elemen dan kapasiti.

Memanfaat daripada kekangan dan pemisahan sedemikian, pembolehubah jenis penuding dalam bahasa Go mempunyai ciri-ciri capaian penuding yang cekap tanpa mengimbangi penuding, sekali gus mengelakkan pengubahsuaian haram isu Data kritikal. Pada masa yang sama, kutipan sampah memudahkan untuk mendapatkan dan mengitar semula penunjuk yang tidak akan diimbangi.

Kepingan mempunyai ciri yang lebih berkuasa daripada penunjuk mentah dan lebih selamat. Apabila hirisan terkeluar dari had, masa jalan akan melaporkan ranap sistem dan menimbulkan timbunan, manakala penunjuk asal hanya akan runtuh.

Apakah penunjuk dalam golang?

Penunjuk ialah pembolehubah yang nilainya ialah alamat pembolehubah lain, iaitu alamat langsung lokasi memori. Seperti pembolehubah atau pemalar, penunjuk mesti diisytiharkan sebelum ia boleh digunakan untuk menyimpan alamat sebarang pembolehubah. Bentuk umum pengisytiharan pemboleh ubah penunjuk ialah:

var var-name *var-type

Di sini, var-type ialah jenis asas penuding; ia mestilah jenis data Go yang sah dan var-name ialah nama pembolehubah penunjuk . Asterisk (*) yang digunakan untuk mengisytiharkan penunjuk adalah sama dengan asterisk yang digunakan untuk pendaraban. Walau bagaimanapun, dalam pernyataan ini, asterisk (*) digunakan untuk menetapkan pembolehubah sebagai penunjuk. Berikut ialah pengisytiharan penunjuk yang sah:

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

Jenis data sebenar nilai semua penunjuk (sama ada integer, titik terapung atau jenis data lain) adalah sama, yang mewakili heks panjang bagi nombor sistem alamat memori. Satu-satunya perbezaan antara penunjuk jenis data yang berbeza ialah jenis data pembolehubah atau pemalar yang ditunjukkan oleh penuding. [Cadangan berkaitan: Pergi tutorial video]

Bagaimana untuk menggunakan penunjuk?

Terdapat beberapa operasi penting yang akan dilaksanakan dengan kerap menggunakan penunjuk.

  • Tentukan pembolehubah penunjuk

  • Tetapkan alamat pembolehubah kepada penunjuk

  • Akhir sekali Akses nilai alamat yang tersedia dalam pembolehubah penunjuk

Ini dilakukan dengan menggunakan operator unary * untuk mengembalikan nilai pembolehubah yang terletak pada alamat yang ditentukan oleh operan. Contoh berikut menggunakan 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 )
}

Apabila kod di atas menyusun dan melaksanakan, ia menghasilkan hasil berikut:

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

dalam bahasa Go penunjuk tiada

Pengkompil Go memberikan nilai Nil kepada pembolehubah penunjuk sekiranya penuding tidak mempunyai alamat yang tepat diberikan. Ini dilakukan apabila pembolehubah diisytiharkan. Penunjuk yang ditentukan sebagai nilai nil dipanggil penuding nol.

nilPenunjuk ialah pemalar bernilai sifar yang ditakrifkan dalam beberapa perpustakaan standard. Rujuk program berikut:

package main

import "fmt"

func main() {
   var  ptr *int

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

Apabila kod di atas menyusun dan melaksanakan, ia menghasilkan hasil berikut:

The value of ptr is 0

Pada kebanyakan sistem pengendalian, program tidak dibenarkan mengakses alamat0 kerana memori ini dikhaskan oleh sistem pengendalian. Walau bagaimanapun, alamat memori 0 mempunyai makna istimewa; ia menunjukkan bahawa penunjuk tidak bertujuan untuk menunjuk ke lokasi memori yang boleh diakses. Tetapi mengikut konvensyen, jika penuding mengandungi nilai nil (sifar), diandaikan ia menunjuk kepada tiada.

Untuk menyemak sama ada ia adalah nil penunjuk, anda boleh menggunakan pernyataan if, seperti yang ditunjukkan di bawah:

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

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Video Pengaturcaraan! !

Atas ialah kandungan terperinci Adakah golang mempunyai penunjuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Adakah pergi hanya golang?Artikel seterusnya:Adakah pergi hanya golang?