go - Golang 短变量声明显示错误未解决
问题描述
我是新来Java
的Go
看我的代码
package utils
import "os"
type FileController struct{
file *os.File
}
func (c *FileController)OpenFile(path string)error{
c.file, err := os.OpenFile(path,os.O_CREATE | os.O_RDWR,0755)
//return some value these
}
我想打开一个文件,但这不起作用
戈兰告诉我Unresolved reference 'err'
如果我先初始化错误,我会编写以下代码
var err error
c.file, err = os.OpenFile(path,os.O_CREATE | os.O_RDWR,0755)
Goland
也告诉我Unused variable 'err'
但是如果我使用
f, err := os.OpenFile(path,os.O_CREATE | os.O_RDWR,0755)
c.file = f
_ = err
我工作
我认为:=
至少可以在左侧有一个未声明的变量
c.file 已经被初始化,错误的一个新变量。
我应该使用第二种方式吗?
我觉得第一种方式不优雅。
更新 1
当我使用@GreatDharmatma 方法时。
高朗告诉我Unresolved variable err
更新 2
它有效,我没有注意到@GreatDharmatma 返回(err error)
我的错。
这是一个总结:
:=
仅在所有左侧变量之前未声明时使用如果
a variable
之前已经声明过(如 c.file)。我们需要事先
err
声明os.OpenFile(path,os.O_CREATE | os.O_RDWR,0755)
var err error
解决此问题的另一种方法是如上所述
named return value
使用@GreatDharmatma
。
从Golang docs
Go 的返回值可以命名。如果是这样,它们将被视为在函数顶部定义的变量。
谢谢大家!祝你今天过得愉快!
Update-3 两天后
来自@LukeJoshuaPark 评论。
使用短变量声明要求不首先声明两个变量” - 不正确。要使用短变量声明,至少不能声明一个
什么LukeJoshuaPark
是对的,我问一个同样的问题golang-nuts
我的回复
For all typed object such as `type *** struct`, `type *** func()`, `type **** int`, their field cannot be redeclare? and cannot be used at left side of `:=`?
热心朋友说
那是对的。成员字段不能在 := 的左侧
这是来自规范:
它是带有初始化表达式但没有类型的常规变量声明的简写:
“var”标识符列表 = 表达式列表。
所以,
x, y:=值
等同于
变量 x, y = 值
将此规则应用于您的示例,它变为:
var c.file, err=os.OpenFile...
这是无效的。
谢谢。问题结束
解决方案
推荐阅读
- c# - 如何(如果可能)使用 Entity Framework Core fluent API 配置实体类型与另一个没有键字段的实体类型之间的关系
- c++ - 用字符串初始化我的类的对象
- node.js - 有什么方法可以自己使用 NodeJS 制作 GUI,而无需为其下载软件包?
- c# - 如何捕捉解码问题。System.FormatException:“Base-64 字符数组或字符串的长度无效。”
- javascript - Angular 9 - 错误类型错误:无法读取未定义的属性“名称”
- python - 遍历字典的 values()
- python - 如何在 Redis 中从 hmset() 切换到 hset()?
- powershell - 如何在同一文件夹中使用 powershell 生成 Zip
- jquery - 画布中精灵左右无限循环
- c++ - 在 BAZEL 中,有没有办法防止依赖 C/C++ 标头传播到依赖库?