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

Fahami dengan mendalam perbezaan antara pembolehubah dan penunjuk dalam bahasa Go

Jan 09, 2024 pm 05:22 PM
pembolehubah penunjuk perbezaan

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
Salin selepas log masuk

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
Salin selepas log masuk

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
}
Salin selepas log masuk

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 Laman Web ini
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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimanakah fungsi generik mengendalikan penunjuk dan jenis rujukan dalam Golang? Bagaimanakah fungsi generik mengendalikan penunjuk dan jenis rujukan dalam Golang? Apr 16, 2024 pm 04:06 PM

Bagaimanakah fungsi generik mengendalikan penunjuk dan jenis rujukan dalam Golang?

Apakah pembolehubah contoh dalam Java Apakah pembolehubah contoh dalam Java Feb 19, 2024 pm 07:55 PM

Apakah pembolehubah contoh dalam Java

Bagaimana untuk mendapatkan pembolehubah daripada kaedah PHP menggunakan Ajax? Bagaimana untuk mendapatkan pembolehubah daripada kaedah PHP menggunakan Ajax? Mar 09, 2024 pm 05:36 PM

Bagaimana untuk mendapatkan pembolehubah daripada kaedah PHP menggunakan Ajax?

Perbandingan mendalam: Analisis perbezaan antara Dimensity 8200 dan Snapdragon Perbandingan mendalam: Analisis perbezaan antara Dimensity 8200 dan Snapdragon Mar 22, 2024 pm 12:48 PM

Perbandingan mendalam: Analisis perbezaan antara Dimensity 8200 dan Snapdragon

Peta minda sintaks Python: pemahaman mendalam tentang struktur kod Peta minda sintaks Python: pemahaman mendalam tentang struktur kod Feb 21, 2024 am 09:00 AM

Peta minda sintaks Python: pemahaman mendalam tentang struktur kod

Tafsiran perbezaan antara versi Oracle11g dan Oracle12c Tafsiran perbezaan antara versi Oracle11g dan Oracle12c Mar 07, 2024 pm 02:30 PM

Tafsiran perbezaan antara versi Oracle11g dan Oracle12c

Bagaimana untuk menggunakan rujukan C++ dan lulus parameter penunjuk? Bagaimana untuk menggunakan rujukan C++ dan lulus parameter penunjuk? Apr 12, 2024 pm 10:21 PM

Bagaimana untuk menggunakan rujukan C++ dan lulus parameter penunjuk?

Kaedah jenis penunjuk Golang lanjutan untuk meningkatkan kemahiran pengaturcaraan Kaedah jenis penunjuk Golang lanjutan untuk meningkatkan kemahiran pengaturcaraan Apr 07, 2024 pm 06:42 PM

Kaedah jenis penunjuk Golang lanjutan untuk meningkatkan kemahiran pengaturcaraan

See all articles