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
DDDasal
2024-12-12 13:28:10326semak imbas

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)
    }
}

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")

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")

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!

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