gpt4 book ai didi

Golang 短变量声明显示错误未解决

转载 作者:数据小太阳 更新时间:2023-10-29 03:40:46 24 4
gpt4 key购买 nike

我是从JavaGo的新手

看我的代码

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
}

我想打开一个文件,但这不起作用

Goland 告诉我未解析的引用'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 方法时。

Golang 告诉我 Unresolved variable err

enter image description here


Update-2

有效,我没有注意到@GreatDharmatma 返回(err error)

这是我的错。

这是一个总结:

  1. := 仅在所有左变量未声明之前使用

  2. 如果一个变量之前已经声明过(比如c.file)。

    我们需要在 os.OpenFile(path,os.O_CREATE | os.O_RDWR,0755) 之前预先声明 err

    var err 错误

  3. 另一种解决此问题的方法是使用 命名返回值,如 @GreatDharmatma 所说。

来自 Golang 文档

Docs-Named-variable

Go's return values may be named. If so, they are treated as variables defined at the top of the function.

谢谢大家!祝你有美好的一天!


Update-3 两天后

来自@LukeJoshuaPark 的评论。

Using a short variable declaration requires both variables to not be declared first" - Not true. To use a short variable declaration, at least one must not be declared

什么 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 `:=`?

热情的 friend 说

That is correct. A member field cannot be on the left side of :=

This is the from the spec:

It is shorthand for a regular variable declaration with initializer expressions but no types:

"var" IdentifierList = ExpressionList .

So,

x, y:=values

is identical to

var x, y = values

Applying this rule to your example, it becomes:

var c.file, err=os.OpenFile...

which is not valid.

谢谢。问题结束

最佳答案

这里的问题是因为你正在使用 :=

使用短变量声明要求两个变量都不要先声明。在你的情况下, c.file 被声明而 err 不是。因此错误。请尝试使用以下代码段。

func (c *FileController)OpenFile(path string)(err error){
c.file, err = os.OpenFile(path,os.O_CREATE | os.O_RDWR,0755)

//return some value these
}

这应该没问题

enter image description here

关于Golang 短变量声明显示错误未解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52731284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com