首頁 >後端開發 >Golang >為什麼我的 Go Global 錯誤變數在初始化後仍然是 Nil?

為什麼我的 Go Global 錯誤變數在初始化後仍然是 Nil?

Susan Sarandon
Susan Sarandon原創
2024-12-11 19:10:16502瀏覽

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

全域錯誤變數在初始化後仍然為Nil

當嘗試全域初始化錯誤變數時,有些使用者可能會遇到一個令人費解的問題,即該變數在後續函數中仍然為nil相同的包,導致意外的程式行為。這個問題源自於 Go 中全域變數的初始化方式。

在下面的範例中,目標是初始化全域錯誤變數loadErr 並檢查另一個函數checkErr() 中的錯誤:

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

但是,由於checkErr() 收到loadErr 的nil 值,因此出現了問題。這是因為 main() 中建立的變數(“loadErr := os.Open('asdasd')”)是 main() 中的局部變量,此時全域變數尚未初始化。

要解決此問題,在將值分配給全域變數時,應使用簡單的賦值(“=”)而不是宣告和初始化(“:=”)變數:

// ...

func main() {
    _, loadErr = os.Open("asdasd")
    // ^ Replaced := with =
    if loadErr != nil {
        checkErr()
    }
    // ...
}

透過使用「=」運算符,全域變數loadErr` 被明確地分配錯誤值,確保套件內的其他函數可以存取它。

以上是為什麼我的 Go Global 錯誤變數在初始化後仍然是 Nil?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn