Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah saya boleh mengakses pemalar atau pembolehubah peringkat atas dalam Go apabila pembolehubah tempatan dengan nama yang sama wujud?

Bagaimanakah saya boleh mengakses pemalar atau pembolehubah peringkat atas dalam Go apabila pembolehubah tempatan dengan nama yang sama wujud?

DDD
DDDasal
2024-11-15 19:40:03825semak imbas

How do I access a top-level constant or variable in Go when a local variable with the same name exists?

Merujuk kepada Pembolehubah Tahap Malar atau Pakej dalam Skop Fungsi

Dalam Go, adalah mungkin untuk mengisytiharkan pembolehubah dengan skop berbeza: setempat (skop fungsi) dan peringkat atas (pakej atau skop fail). Kadangkala, anda mungkin menghadapi situasi di mana anda ingin merujuk kepada pemalar atau pembolehubah peringkat atas dalam skop fungsi, di mana pembolehubah tempatan dengan nama yang sama wujud.

Pertimbangkan coretan kod berikut:

package main

import "fmt"

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

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

Soalan: Bagaimanakah kita boleh merujuk kepada nama pemalar dan bukannya pembolehubah tempatan?

Jawapan:

Mengakses pembolehubah skop tertutup di hadapan pembolehubah tempatan dengan nama yang sama tidak mungkin. Walaupun pembolehubah tempatan berada dalam skop, ia membayangi pembolehubah luar dalam fungsi, menjadikannya tidak boleh diakses.

Spesifikasi bahasa Go menyatakan:

An identifier declared in a block may be redeclared in an inner block. While the identifier of the inner declaration is in scope, it denotes the entity declared by the inner declaration.

Alternatif:

Jika anda perlu mengakses kedua-dua pembolehubah peringkat atas dan setempat secara serentak, pertimbangkan untuk menggunakan nama yang berbeza. Walau bagaimanapun, jika itu tidak dapat dilaksanakan, anda boleh menggunakan alternatif berikut:

  1. Tugaskan kepada Pembolehubah Baharu buat sementara waktu:

    • Kedai nilai pembolehubah peringkat atas dalam pembolehubah sementara sebelum diberikan kepada pembolehubah tempatan.
    • Contohnya:

      cname := name
      name := "Jobs"
      fmt.Println(name)
      fmt.Println(cname)
  2. Dedahkan Pembolehubah Tahap Atas Secara Tidak Langsung:

    • Buat fungsi atau kaedah yang mengembalikan nilai pembolehubah peringkat atas.
    • Sebagai contoh :

      func getName() string {
       return name
      }
      
      name := "Jobs"
      fmt.Println(name)
      fmt.Println(getName())

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengakses pemalar atau pembolehubah peringkat atas dalam Go apabila pembolehubah tempatan dengan nama yang sama wujud?. 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