Golang中"err"变量声明覆盖问题解析
Golang中"err"变量声明覆盖问题解析 好的,我有以下代码:
// Gets an environment variable and parse it.
expiration, err := time.ParseDuration(os.Getenv("expiration"))
if err != nil {
panic(err)
}
// Gets an environment filename and verifies that it exists.
dbSource := os.Getenv("filename")
if _, err := os.Stat(dbSource); err != nil && os.IsNotExist(err) {
panic(err)
}
但是第二段代码抛出以下警告信息:
声明 “err” 遮蔽了在 ./main.go:33 处的声明
可以通过将第二段代码替换为以下内容来快速修复:
// Gets and environment filename and verifies that it exists.
dbSource := os.Getenv("filename")
// I changed ":=" by "="
if _, err = os.Stat(dbSource); err != nil && os.IsNotExist(err) {
panic(err)
}
但这样做会在第一段和第二段代码之间创建依赖关系。我的意思是,如果我删除第一段代码,第二段代码将无法工作。而它们是不同的东西。
你会如何以优雅的方式解决这种情况?
更多关于Golang中"err"变量声明覆盖问题解析的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
在代码之前声明 err 变量
var err error
在代码的其余部分只使用 err=。
更多关于Golang中"err"变量声明覆盖问题解析的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
好的,之前的方案解决了问题。但这个方案同样有效:
dbSource := os.Getenv("filename")
info, err := os.Stat(dbSource)
if err != nil && os.IsNotExist(err) {
panic(err)
}
// 实际上我们不需要info变量
fmt.Println(info)
问题是…问题在于我不需要"info"变量。我想简写成:
dbSource := os.Getenv("dbSource")
_, err := os.Stat(dbSource)
if err != nil && os.IsNotExist(err) {
panic(err)
}
但前面的代码会抛出错误信息。我建议Golang团队修改通知规则。这样合理吗?
补充信息: 我通过重命名err变量解决了这个问题
dbSource := os.Getenv("dbSource")
if _, fileError := os.Stat(dbSource); fileError != nil {
panic(fileError)
}


