Rumah > pembangunan bahagian belakang > Golang > Mengapa Pembolehubah Ralat Dimulakan Secara Global Saya Kekal Tiada dalam Fungsi Lain?

Mengapa Pembolehubah Ralat Dimulakan Secara Global Saya Kekal Tiada dalam Fungsi Lain?

DDD
Lepaskan: 2024-12-12 13:28:10
asal
333 orang telah melayarinya

Why Does My Globally Initialized Error Variable Remain Nil in Another Function?

Pembolehubah Ralat Global Kekal Tiada Selepas Permulaan

Masalah

Apabila memulakan pembolehubah ralat secara global , ia kekal sifar dalam fungsi lain dalam pakej yang sama. Ini boleh menghalang keadaan panik daripada dicetuskan seperti yang dijangkakan.

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

Jawapan

Isu timbul kerana loadErr pembolehubah dalam fungsi utama ialah pembolehubah tempatan baharu . Pembolehubah global tidak pernah diberikan nilai. Untuk membetulkannya, tugasan pembolehubah harus dipermudahkan:

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

Dengan menggunakan =, loadErr pembolehubah global akan dimulakan dan sebarang ralat seterusnya akan disebarkan dengan betul.

Pertimbangan Tambahan

Jika anda ingin mengekalkan nilai pulangan daripada os.Open, anda perlu mengisytiharkan pembolehubah kedua:

var f *os.File
f, loadErr = os.Open("asdasd")
Salin selepas log masuk

Dalam kes ini, := tidak boleh digunakan kerana ia akan mencipta pembolehubah tempatan dan mengabaikan pembolehubah global.

Atas ialah kandungan terperinci Mengapa Pembolehubah Ralat Dimulakan Secara Global Saya Kekal Tiada dalam Fungsi Lain?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan