Rumah > pembangunan bahagian belakang > Golang > Mengapa Pembolehubah Ralat Global Saya Kekal Tiada Selepas Permulaan dalam Go?

Mengapa Pembolehubah Ralat Global Saya Kekal Tiada Selepas Permulaan dalam Go?

Barbara Streisand
Lepaskan: 2024-12-13 08:04:10
asal
817 orang telah melayarinya

Why Does My Global Error Variable Remain Nil After Initialization in Go?

Pembolehubah Ralat Global Kekal Tiada Selepas Permulaan: Mendedahkan Percanggahan

Pertimbangkan kod berikut:

package main

import (
    "os"
    "fmt"
)

var loadErr error

func main() {
    f, loadErr := os.Open("asdasd")
    if loadErr != nil {
        checkErr()
    }
    if f != nil {
        fmt.Println(f.Name())
    }
}

// panic won't be called because loadErr is nil
func checkErr() {
    if loadErr != nil {
        panic(loadErr)
    }
}
Salin selepas log masuk

Membingungkan , kod ini tidak panik, walaupun loadErr adalah nil. Fungsi yang sama checkErr() ditakrifkan untuk panik apabila loadErr bukan nol. Apakah yang menyebabkan percanggahan ini?

Misteri Terbongkar

Punca isu terletak pada perbezaan halus antara pembolehubah tempatan dan global. Dalam coretan kod pertama, baris:

f, loadErr := os.Open("asdasd")
Salin selepas log masuk

mencipta pembolehubah loadErr setempat baharu dalam skop fungsi utama. Pembolehubah tempatan ini berbeza daripada loadErr global yang diisytiharkan di luar mana-mana fungsi. Akibatnya, loadErr global kekal tidak disentuh dan tiada sepanjang pelaksanaan kod.

Menyelesaikan Percanggahan

Untuk membetulkan isu dan memastikan bahawa loadErr global adalah tetapkan, gantikan := dengan = dalam baris yang disebutkan di atas:

func main() {
    _, = os.Open("asdasd")
Salin selepas log masuk

Perubahan ini memberikan nilai os.Open() terus kepada global loadErr, dengan itu menetapkannya dengan betul kepada nilai yang dikehendaki.

Nota Tambahan

Jika anda ingin mengekalkan nilai f juga, praisytiharkan f di luar skop fungsi:

var f *os.File

func main() {
    f, = os.Open("asdasd")
Salin selepas log masuk

Menggunakan := dalam kes ini akan buat pembolehubah f setempat, mengatasi pembolehubah global.

Atas ialah kandungan terperinci Mengapa Pembolehubah Ralat Global Saya Kekal Tiada Selepas Permulaan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan