10

我正在学习谷歌的新语言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);
}
4

7 回答 7

24

你可以试试这个:

cwd, _ := os.Getwd();

但似乎最好将错误保留在 Jurily 的答案中,这样您就知道是否出了问题。

于 2009-11-11T23:22:34.883 回答
11

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

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

fmt.Printf("%v %v %v",somevar1,somevar2,somevar3)

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

我希望看到 go 工具的标志,让我在开发时抑制这个错误。

于 2012-02-09T23:07:00.323 回答
4

这行得通吗?

cwd, error := os.Getwd();
if error == nil {
    fmt.Printf(cwd);
}
于 2009-11-11T23:12:02.407 回答
3

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

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

它打印什么?

于 2009-11-12T05:03:10.513 回答
2

我和你有同样的情况。从文档

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

未使用变量的存在可能表明存在错误,而未使用的导入只会减慢编译速度。在你的代码树中积累足够多的未使用的导入,事情会变得非常缓慢。由于这些原因,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.
    ....
}
于 2014-04-10T04:45:23.530 回答
1

如果你真的只是想删除编译错误,你可以尝试类似'a = a'或'error = error'。

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

于 2011-08-10T19:12:17.770 回答
0

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

  1. 通过解决错误

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

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

    cwd, _ := os.Getwd()

于 2021-02-09T12:03:26.087 回答