首页 >后端开发 >Golang >为什么我的全局初始化错误变量在另一个函数中保持为零?

为什么我的全局初始化错误变量在另一个函数中保持为零?

DDD
DDD原创
2024-12-12 13:28:10335浏览

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