代码之家  ›  专栏  ›  技术社区  ›  Greendrake

报告未使用函数内部使用的变量

  •  -1
  • Greendrake  · 技术社区  · 9 月前

    这很好:

    package main
    
    var foo string
    
    func main() {
        fn := func() {
            foo = "AAA"
        }
        fn()
    }
    

    但如果我们将变量声明移到内部 main() :

    package main
    
    func main() {
        var foo string
        fn := func() {
            foo = "AAA"
        }
        fn()
    }
    

    然后它咆哮着“foo已声明但未使用”。

    为什么会这样?

    1 回复  |  直到 9 月前
        1
  •  1
  •   Martin Brown    9 月前

    编译器可以在第二种情况下看到,对foo的赋值是完全没有意义的。作业的结果永远不会被读取。如果没有它,代码也能正常工作。它正在努力提供帮助。

    在第一种情况下,编译器无法确保foo作为全局变量没有在其他地方使用。

    尽管一些现代编译器也可以发现这一点,并在变量被分配后从未使用过或更糟的是在分配之前使用过时发出警告(或者在代码中有一条路径可能发生这种情况)。