“变量声明但未使用”编译错误

时间:2009-11-11 23:05:41

标签: variables go compiler-errors declaration

我正在学习Google的新语言Go。我只是尝试了一些东西而且我注意到了 如果你声明一个变量并且不对它做任何事情那么go编译器(在我的情况下 8g )就不能了 编译时出现此错误:hello.go:9: error declared and not used。我对此感到惊讶,因为大多数语言编译器只是警告你关于未使用的变量但仍然编译。

无论如何我可以解决这个问题吗?我检查了编译器的文档,我没有看到任何会改变这种行为的东西。有没有办法只删除error以便编译?

package main

import "fmt"
import "os"

func main()
{
     fmt.Printf("Hello World\n");
     cwd, error := os.Getwd();
     fmt.Printf(cwd);
}

7 个答案:

答案 0 :(得分:22)

你可以试试这个:

cwd, _ := os.Getwd();

但似乎最好像Jurily的回答一样保留错误,这样你就知道出了什么问题。

答案 1 :(得分:9)

这可能会让开发变得有点痛苦。有时我会运行已声明但未使用的变量的代码(但使用)。

在这些情况下,我这样做很简单:

  

fmt.Printf(“%v%v%v”,somevar1,somevar2,somevar3)

在那里,它们被“使用”。

我希望看到go工具的一个标志,让我在开发过程中抑制此错误。

答案 2 :(得分:4)

这有用吗?

cwd, error := os.Getwd();
if error == nil {
    fmt.Printf(cwd);
}

答案 3 :(得分:2)

您可以通过导入“fmt”并使用

找出错误
cwd, err := os.Getwd();
if err != nil {
    fmt.Printf("Error from Getwd: %s\n", err)
}

它打印什么?

答案 4 :(得分:1)

如果你真的想删除编译错误,你可以试试'a = a'或'error = error'之类的东西。

来自这里的一些人的论点,指出这样的编译错误是很好的,因为它们防止了大多数情况下的许多错误,所以你应该避免这样的结构。另一方面,我非常喜欢测试,我写的代码是否确实编译了!在这种情况下它是好的,而不必删除所有声明的&未使用的变量所以很少使用'a = a'构造,不要将它们留在那里!

答案 5 :(得分:1)

我遇到了和你一样的情况。来自docs

  

我可以停止这些关于我未使用的变量/导入的投诉吗?

     

未使用的变量的存在可能表示错误,而未使用的导入只会减慢编译速度。在代码树中累积足够多的未使用的导入,事情会变得非常缓慢。由于这些原因,Go不允许。

     

在开发代码时,临时创建这些情况很常见,在程序编译之前必须编辑它们会很烦人。

     

有些人要求使用编译器选项来关闭这些检查,或者至少将它们减少为警告。但是,没有添加这样的选项,因为编译器选项不应该影响语言的语义,因为Go编译器不报告警告,只报告阻止编译的错误。

     

没有警告有两个原因。首先,如果它值得抱怨,那么值得在代码中修复。 (如果它不值得修复,那就不值得一提了。)其次,让编译器生成警告鼓励实现警告可以使编译噪声的弱情况,掩盖的真实错误应该修复。

     但是,很容易解决这个问题。使用空白标识符可以在您开发过程中保留未使用的内容。

import "unused"

// This declaration marks the import as used by referencing an
// item from the package.
var _ = unused.Item  // TODO: Delete before committing!

func main() {
    debugData := debug.Profile()
    _ = debugData // Used only during debugging.
    ....
}

答案 6 :(得分:0)

您可以通过以下两种方法之一解决未使用的变量问题。

  1. 通过解决错误

    cwd, error := os.Getwd() if error !=nil{ fmt.Println(error) }

  2. 这里我们不需要值本身,所以我们用 空白标识符“_”

    cwd, _ := os.Getwd()