首頁 >後端開發 >Golang >為什麼我的全域初始化錯誤變數在另一個函數中保持為零?

為什麼我的全域初始化錯誤變數在另一個函數中保持為零?

DDD
DDD原創
2024-12-12 13:28:10326瀏覽

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

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

問題

全域初始化錯誤變數時,它在同一包內的另一個函數中保持為零。這可以防止恐慌條件按預期觸發。

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

回答

出現問題的原因是 main 函數中的變數 loadErr 是一個新的局部變數。全域變數永遠不會被賦值。為了修正這個問題,應該簡化變數賦值:

func main() {
    _, loadErr = os.Open("asdasd")

透過使用 =,全域變數 loadErr 將被初始化,並且任何後續錯誤都將正確傳播。

其他注意事項

如果你想保存os.Open 的回傳值,你需要預聲明第二個變數:

var f *os.File
f, loadErr = os.Open("asdasd")

在這種情況下,不能使用:=,因為它會建立局部變數並忽略全域變數。

以上是為什麼我的全域初始化錯誤變數在另一個函數中保持為零?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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