初始化后,全局错误变量保持为零 [英] global error variable remains nil after initialization

查看:44
本文介绍了初始化后,全局错误变量保持为零的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我全局初始化一个错误变量时,它似乎对同一包中的另一个函数无效.
我不明白为什么这段代码没有引起恐慌?

 程序包主要进口 ("os""fmt")var loadErr错误func main(){f,loadErr:= os.Open("asdasd")如果loadErr!= nil {checkErr()}如果f!= nil {fmt.Println(f.Name())}}//因为loadErr为nil,所以不会调用panicfunc checkErr(){如果loadErr!= nil {恐慌(loadErr)}} 

但是当我这样做时,它似乎按预期工作了?

 程序包主要进口 ("os")var loadErr错误func main(){_,err:= os.Open("asdasd")loadErr = err如果loadErr!= nil {checkErr()}}//恐慌将按预期方式被调用func checkErr(){如果loadErr!= nil {恐慌(loadErr)}} 

解决方案

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

您创建一个新的本地变量 loadErr ,但永远不会设置全局变量.仅使用 = ,而不使用:= 来使用全局变量.

也要保留第二个值,您必须预先声明第二个变量:

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

不幸的是,您不能在此处使用:= ,因为:= 不会考虑非局部变量,在这种情况下只会创建局部变量.

When I initialize an error variable globally it seems that it's nil to another function in the same package.
I don't understand why is this code not panicing?

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

But when I do this, it seems to work as expected?

package main

import (
    "os"
)

var loadErr error

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

// panic will be called as expected
func checkErr() {
    if loadErr != nil {
        panic(loadErr)
    }
}

解决方案

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

You create a new, local variable loadErr, the global one is never set. Use just =, not :=, to use the global one.

Edit: To hold the second value too, you have to predeclare the second variable:

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

Unfortunately, you can't use := here, as := will not consider non-local variables and just create a local variable in this case.

这篇关于初始化后,全局错误变量保持为零的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆