Rumah >pembangunan bahagian belakang >Golang >Penunjuk Pergi: Bila hendak menggunakan `&` dan `*`?

Penunjuk Pergi: Bila hendak menggunakan `&` dan `*`?

Patricia Arquette
Patricia Arquetteasal
2024-12-02 08:55:11259semak imbas

Go Pointers: When to Use `&` and `*`?

Pemahaman Penunjuk (& dan *)

Go selalunya memerlukan pemindahan pembolehubah sebagai argumen kepada fungsi. Walau bagaimanapun, ia boleh mengelirukan apabila menghadapi ralat semasa operasi sedemikian. Artikel ini menjelaskan perbezaan antara & dan * penunjuk, menerangkan bila setiap satu harus digunakan.

Penunjuk dan Alamat

Penunjuk ialah pembolehubah yang menyimpan alamat pembolehubah lain dalam ingatan. Operator & mendapatkan semula alamat pembolehubah. Contohnya, jika 'u' ialah struct Pengguna, '&u' mengembalikan alamat 'u'.

Menyahkod JSON dengan &

Untuk memahami & operator , pertimbangkan kod berikut:

var u User

if err := decoder.Decode(&u); err != nil {
    // Code to handle error...
}

Fungsi json.Decode mengharapkan penuding untuk menyahkod data JSON ke dalamnya. Dalam contoh ini, 'u' hanyalah struct Pengguna, bukan penunjuk. Dengan menggunakan '&u', kami menyediakan fungsi dengan alamat 'u', membolehkan penyahkodan berjaya.

Petunjuk dan Pengalihan

Pengendali boleh dianggap sebagai "pengalihan semula" kepada nilai yang disimpan pada alamat penuding. Sebagai contoh, jika penunjuk 'x' menyimpan alamat 'y', 'x' memberi kita nilai 'y'.

Pertimbangkan kod berikut:

x := new(User) // Creates a pointer to a User struct
*x = y        // Assigns the value of 'y' to the struct pointed to by 'x'
fmt.Println(*x) // Prints the value of 'y'

Ringkasan Penggunaan

  • Gunakan & untuk mendapatkan alamat pembolehubah atau untuk lulus penunjuk kepada fungsi yang memerlukan satu.
  • Gunakan * untuk mengakses nilai yang disimpan pada alamat penuding.
  • Elakkan menggunakan * pada bukan penunjuk, kerana ia akan mengakibatkan ralat.

Atas ialah kandungan terperinci Penunjuk Pergi: Bila hendak menggunakan `&` dan `*`?. 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