Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ringkaskan perbezaan antara golang dan bahasa lain pada penunjuk

Ringkaskan perbezaan antara golang dan bahasa lain pada penunjuk

PHPz
PHPzasal
2023-04-11 10:38:46458semak imbas

Bahasa Go ialah bahasa pengaturcaraan yang boleh disusun secara statik ke dalam fail binari. Penunjuk asasnya agak berbeza daripada bahasa lain. Artikel ini akan membincangkan perbezaan antara penunjuk bahasa Go dan penunjuk dalam bahasa lain.

  1. Jenis penunjuk

Dalam bahasa Go, jenis setiap pembolehubah penunjuk ditentukan oleh jenis pembolehubah yang ditunjukkannya. Sebagai contoh, jika pembolehubah penunjuk menunjuk kepada pembolehubah jenis int, jenis pembolehubah penunjuk ialah *int.

Penunjuk dalam bahasa Go juga boleh menunjuk kepada struktur, tatasusunan atau jenis tersuai lain. Ini membolehkan parameter fungsi dan nilai pulangan daripada sebarang jenis, malah penunjuk kepada jenis tersuai.

  1. Penggunaan penunjuk

Dalam bahasa Go, penunjuk tidak perlu melakukan sebarang operasi penunjuk yang jelas, seperti pengendali alamat & atau pengendali dereference *. Ini kerana dalam bahasa Go, apabila memberikan nilai kepada pembolehubah penunjuk, alamat memori yang ditunjuk oleh pembolehubah penunjuk sebenarnya ditukar kepada alamat baharu.

Kelebihan kaedah ini ialah ia boleh mengelakkan ralat penunjuk biasa, seperti penunjuk nol, penunjuk liar, dsb.

Berikut ialah contoh penggunaan penunjuk bahasa Go:

func main() {
    var a int = 42
    var b *int = &a

    fmt.Println(a) // 输出 42
    fmt.Println(*b) // 输出 42

    a = 27
    fmt.Println(*b) // 输出 27
}

Dalam contoh ini, pembolehubah a ialah pembolehubah jenis int dan pembolehubah b ialah pembolehubah penunjuk yang menunjuk kepada pembolehubah . Dengan menambahkan tanda * di hadapan pembolehubah b, anda boleh mendapatkan nilai pembolehubah a.

  1. Salinan nilai penunjuk

Dalam bahasa Go, apabila pembolehubah penuding dihantar sebagai parameter kepada fungsi, apa yang sebenarnya diluluskan ialah alamat memori yang ditunjukkan oleh pembolehubah penunjuk. Jika nilai yang ditunjukkan oleh pembolehubah penunjuk diubah suai dalam fungsi, nilai itu juga akan berubah di luar fungsi. Ini berbeza dengan bahasa lain, di mana apabila penuding dihantar ke fungsi, hanya nilai penuding diluluskan.

Berikut ialah contoh yang lebih khusus:

func change(num *int) {
    *num = 10
}

func main() {
    var num int = 20

    fmt.Println(num) // 输出 20
    change(&num)
    fmt.Println(num) // 输出 10
}

Dalam contoh ini, fungsi perubahan menghantar penunjuk kepada pembolehubah num sebagai parameter dan mengubah suai nilai pembolehubah nombor kepada 10. Oleh itu, hasilnya adalah betul.

  1. Penunjuk nol

Dalam bahasa Go, penunjuk nol diwakili sebagai nol dan penunjuk nol menghala ke alamat memori yang tidak pasti. Tidak seperti bahasa lain, penunjuk nol Go boleh dinyahrujuk tanpa menyebabkan ralat masa jalan.

Berikut ialah contoh penyahrujukan penuding nol:

func main() {
    var ptr *int

    fmt.Println(ptr) // 输出 <nil>

    sum := *ptr // 报错:panic: runtime error: invalid memory address or nil pointer dereference
}

Dalam contoh di atas, kami mencipta ptr pembolehubah penuding yang menunjuk kepada pembolehubah jenis int, tetapi tidak memberikannya memori , jadi penunjuk adalah sifar. Apabila kita cuba untuk menyahrujuk penuding nol, ralat masa jalan akan terhasil.

Ringkasnya, penunjuk bahasa Go berbeza sedikit daripada penunjuk dalam bahasa lain Anda perlu memberi perhatian kepada ciri-cirinya dan menggunakannya dengan betul.

Atas ialah kandungan terperinci Ringkaskan perbezaan antara golang dan bahasa lain pada 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