Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Fahami dengan mendalam perbezaan antara pembolehubah dan penunjuk dalam bahasa Go

Fahami dengan mendalam perbezaan antara pembolehubah dan penunjuk dalam bahasa Go

王林
王林asal
2024-01-09 17:22:181139semak imbas

Fahami dengan mendalam perbezaan antara pembolehubah dan penunjuk dalam bahasa Go

Pemahaman mendalam tentang perbezaan antara pembolehubah dan penunjuk dalam bahasa Go

Bahasa Go ialah bahasa yang disusun untuk menyelesaikan masalah pengkomputeran berbilang teras dan rangkaian. Ia adalah bahasa yang ditaip kuat secara statik serupa dengan bahasa C, tetapi berbanding dengan bahasa C, bahasa Go mempunyai beberapa peningkatan prestasi dan sintaks untuk pembolehubah dan penunjuk. Artikel ini akan menyelidiki perbezaan antara pembolehubah dan penunjuk dalam bahasa Go dan mendalami pemahaman melalui contoh kod tertentu.

Pertama sekali, kita perlu memahami konsep pembolehubah dan penunjuk dalam bahasa Go. Pembolehubah ialah bekas yang digunakan untuk menyimpan data dalam atur cara, manakala penunjuk ialah pembolehubah yang menyimpan alamat memori. Melalui penunjuk, kita boleh terus mengakses dan mengubah suai nilai yang disimpan dalam alamat memori tersebut.

Dalam bahasa Go, pembolehubah diisytiharkan dan ditetapkan pada masa yang sama. Berikut ialah contoh:

var num int = 10

Dalam contoh ini, kami mengisytiharkan pembolehubah yang dipanggil num dan memulakannya dengan nilai 10. Dalam kes ini, nombor pembolehubah berkaitan secara langsung dengan nilai khusus 10.

Pengisytiharan penunjuk perlu dikenal pasti dengan menggunakan asterisk (*). Berikut ialah contoh:

var ptr *int

Dalam contoh ini, kami mengisytiharkan pembolehubah penunjuk yang dipanggil ptr. Tetapi ambil perhatian bahawa pembolehubah ptr pada masa ini tidak dikaitkan dengan sebarang nilai tertentu, ia hanya menyimpan alamat memori.

Seterusnya, kami akan menggunakan contoh kod khusus untuk memahami dengan mendalam perbezaan antara pembolehubah dan penunjuk. Pertimbangkan sekeping kod berikut:

package main

import "fmt"

func main() {
    var num1 int = 10
    var num2 int = num1

    var ptr *int = &num1
    var num3 int = *ptr

    fmt.Println(num1, num2, num3) // 输出:10 10 10

    num1 = 20

    fmt.Println(num1, num2, num3) // 输出:20 10 10

    *ptr = 30

    fmt.Println(num1, num2, num3) // 输出:30 10 10
}

Dalam contoh ini, kita mempunyai pembolehubah dipanggil num1 yang nilainya ialah 10. Kami kemudiannya memulakan dua pembolehubah lain, num2 dan num3, dengan nilai num1. Seterusnya, kami mengisytiharkan pembolehubah penunjuk bernama ptr dan menetapkan alamat memori num1 kepada ptr melalui operator alamat (&). Selepas itu, kami mengakses nilai yang ditunjukkan oleh penunjuk ptr melalui pengendali penyahrujukan (*) dan menetapkan nilai ini kepada num3.

Dalam output pertama, kita dapat melihat bahawa num1, num2 dan num3 semuanya mempunyai nilai 10, ini kerana mereka sebenarnya semua salinan nilai yang sama. Apabila kita menukar nilai num1 kepada 20, nilai num1 itu sendiri berubah, tetapi nilai num2 dan num3 tidak berubah. Ini kerana num2 dan num3 hanyalah salinan nilai num1, dan ia disimpan pada alamat memori yang berbeza daripada num1.

Kemudian kami menggunakan operator penyahrujukan (*) untuk mengubah suai nilai yang ditunjukkan oleh penunjuk ptr. Pada masa ini, kami mengubah suai nilai dalam alamat memori yang ditunjuk oleh ptr kepada 30. Oleh kerana num1 dan ptr berkongsi alamat memori yang sama, apabila kita mengubah suai nilai yang ditunjukkan oleh ptr, nilai num1 juga berubah. Dan num2 dan num3 hanyalah salinan nilai num1 Mereka tidak berkongsi alamat memori dengan num1, jadi nilai mereka tidak berubah.

Melalui kod contoh di atas, kita dapat melihat perbezaan antara pembolehubah dan penunjuk. Pembolehubah menyimpan nilai tertentu, manakala penunjuk menyimpan alamat memori. Melalui penunjuk, kita boleh terus mengakses dan mengubah suai nilai yang disimpan dalam alamat memori tersebut. Cara berkongsi dan mengubah suai data melalui penunjuk ini boleh meningkatkan prestasi dan menjimatkan penggunaan memori dalam beberapa senario yang memerlukan operasi memori yang kerap.

Dengan memahami secara mendalam perbezaan antara pembolehubah dan penunjuk dalam bahasa Go, kami dapat memahami dengan lebih baik mekanisme pengurusan memori bahasa Go dan menerapkannya dengan lebih fleksibel dalam proses pengaturcaraan. Dalam pembangunan sebenar, bergantung pada keperluan dan senario tertentu, kita boleh memilih untuk menggunakan pembolehubah atau penunjuk untuk mencapai keseimbangan terbaik antara prestasi dan struktur kod.

Atas ialah kandungan terperinci Fahami dengan mendalam perbezaan antara pembolehubah dan penunjuk dalam bahasa Go. 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