Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengakses Pemalar atau Pembolehubah Tahap Pakej Apabila Pembolehubah Setempat dengan Nama Yang Sama Wujud dalam Go?

Bagaimana untuk Mengakses Pemalar atau Pembolehubah Tahap Pakej Apabila Pembolehubah Setempat dengan Nama Yang Sama Wujud dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-16 11:21:03831semak imbas

How to Access Package-Level Constants or Variables When a Local Variable with the Same Name Exists in Go?

Merujuk Pemalar atau Pembolehubah Tahap Pakej ke atas Pembolehubah Tahap Fungsi

Dalam Go, skop pembolehubah menentukan kebolehaksesannya dalam blok kod yang berbeza. Apabila pembolehubah tempatan dan pemalar peringkat atas atau pembolehubah peringkat pakej berkongsi nama yang sama, isu biasa timbul: bagaimana untuk merujuk kepada pembolehubah peringkat pemalar atau pakej dan bukannya yang setempat?

Masalahnya

Pertimbangkan program Go berikut:

package main

import "fmt"

const name = "Yosua"
// or var name string = "James"

func main() {
    name := "Jobs"
    fmt.Println(name)
}

Program ini mengisytiharkan nama tetap pada peringkat pakej, tetapi dalam fungsi utama, nama pembolehubah lain yang dinamakan diisytiharkan pada tahap fungsi. Apabila program berjalan, ia mencetak "Pekerjaan", yang merupakan nilai nama pembolehubah peringkat fungsi setempat. Bagaimanakah anda boleh mengakses nama pemalar peringkat pakej sebaliknya?

Tiada Rujukan Langsung

Malangnya, Go tidak menyediakan cara langsung untuk merujuk kepada pengecam peringkat atas dalam skop blok di mana pembolehubah tempatan dengan nama yang sama wujud. Menurut spesifikasi Go untuk Pengisytiharan dan Skop, pengecam yang diisytiharkan secara tempatan diutamakan dalam skopnya.

Penyelesaian Penyelesaian

Untuk mengakses kedua-dua pembolehubah peringkat atas dan pembolehubah setempat, anda boleh menggunakan nama yang berbeza atau gunakan salah satu daripada penyelesaian berikut:

Menyimpan Nilai Tahap Atas Dahulu

cname := name
name := "Jobs"
fmt.Println(name)
fmt.Println(cname)

Kaedah ini menyimpan nilai pemalar atau pembolehubah peringkat atas sebelum mencipta pembolehubah setempat .

Menggunakan Fungsi untuk Mengakses Nilai Peringkat Atas

func getName() string {
    return name
}

name := "Jobs"
fmt.Println(name)
fmt.Println(getName())

Pendekatan ini menyediakan cara alternatif untuk mengakses pembolehubah peringkat atas dengan mentakrifkan fungsi yang mengembalikan nilainya.

Output

Kedua-dua kaedah mengembalikan output yang sama:

Jobs
Yosua

Ini menunjukkan bahawa anda boleh mengakses pembolehubah peringkat atas semasa masih menggunakan pembolehubah tempatan dengan nama yang sama dengan menggunakan salah satu penyelesaian ini. Walau bagaimanapun, adalah penting untuk diingat bahawa pembolehubah tempatan diutamakan berbanding pengecam peringkat atas dalam skopnya.

Atas ialah kandungan terperinci Bagaimana untuk Mengakses Pemalar atau Pembolehubah Tahap Pakej Apabila Pembolehubah Setempat dengan Nama Yang Sama Wujud dalam 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