我正在学习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);
}
答案 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)
您可以通过以下两种方法之一解决未使用的变量问题。
通过解决错误
cwd, error := os.Getwd() if error !=nil{ fmt.Println(error) }
这里我们不需要值本身,所以我们用 空白标识符“_”
cwd, _ := os.Getwd()