当前位置: 首页 > 面试题库 >

为什么golang编译器认为变量已声明但未使用?

杜俭
2023-03-14
问题内容

我是golang的新手,我编写了一个测试io包的程序:

func main() {
    readers := []io.Reader{
         strings.NewReader("from string reader"),
         bytes.NewBufferString("from bytes reader"),
    }

    reader := io.MultiReader(readers...)
    data := make([]byte, 1024)

    var err error
    //var n int

    for err != io.EOF {
        n, err := reader.Read(data)
        fmt.Printf("%s\n", data[:n])
    }
    os.Exit(0)
}

编译错误为“已声明并且未使用err”。但是我想我已经使用err来声明。为什么编译器会输出此错误?


问题答案:

errfor
的内部正在遮盖for的err外部,并且未被使用(for的内部)。发生这种情况的原因是,您正在使用简短的变量声明(与:=运算符一起使用),该声明声明了一个新err变量,该新变量遮盖了for外部声明的变量。



 类似资料:
  • 变量被编译器声明为const,导致无法编译

  • 问题内容: 我正在学习Google的新语言Go。我只是在尝试一些东西,我注意到,如果您声明一个变量并且不对其执行任何操作,则go编译器(在我的情况下为 8g )将无法 编译,并显示以下错误:。令我惊讶的是,大多数语言编译器只是 警告 您有关未使用的变量,但仍会编译。 无论如何,我能解决这个问题吗?我检查了编译器的文档,但看不到任何会改变此行为的内容。有没有一种方法可以删除以进行编译? 问题答案:

  • 问题内容: 我偶然发现了一个奇怪的问题,下面的代码无法编译: 错误(代码是linter推荐的代码)。: 注意,确实使用了该变量。 但是,如果我添加了else块-一切都会按预期编译: 这看起来像是编译器中的错误,还是一个已知问题?任何想法?(我正在使用go 1.11) 编辑:到目前为止的所有被告。按照:https : //golang.org/ref/spec#Short_variable_decl

  • 问题内容: 我有以下函数给我“已声明变量且未使用变量”错误: 它给了我以下错误: 东西是,,并且都在使用中。我无法解释为什么编译器认为您不是。 问题答案: 正如@kostix所说,是本地范围。试试这个代码

  • 问题内容: 这是一个真正的初学者问题(我仍在学习Java基础知识)。 我可以(有点)理解为什么方法将返回而不是,或者为什么它们将接受List参数而不是ArrayList。如果对方法没有影响(即,如果不需要ArrayList中的特殊方法),则这将使该方法更加灵活,并且更易于调用者使用。其他集合类型(例如Set或Map)也是如此。 我不明白的是:创建这样的局部变量似乎是一种惯例: 虽然这种形式的频率较

  • 问题内容: 以下方法不起作用,因为内部块声明的变量与外部块中的变量同名。显然,变量属于声明它们的方法或类,而不属于声明它们的块,因此,我无法编写一个简短的临时临时块进行调试,而恰好将外部作用域中的变量压入阴影只是片刻: 我使用过的几乎每种块范围语言都支持此功能,包括我在学校为解释器和编译器编写的琐碎小语言。Perl可以做到这一点,Scheme甚至C都可以做到。甚至PL / SQL也支持这一点! J