全域錯誤變數初始化後仍為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中文網其他相關文章!