以下代码生成编译错误:“已声明并未使用err”。如果这里存在范围/阴影问题,那是由于我不了解的原理。有人可以解释吗?
package main import ( "fmt" ) func main() { var ( err error dto = make(map[string]interface{}) ) dto[`thing`],err = getThings(); fmt.Println(dto[`thing`]); } func getThings() (string,error) { return `the thing`,nil }
这不是因为有任何阴影。err除了为变量赋值之外,您没有使用任何声明的变量。
err
根据常见问题
未使用的变量的存在可能表明存在错误,而未使用的导入只会减慢编译速度。在代码树中积累足够的未使用导入,事情可能会变得很慢。由于这些原因,Go不允许
如果声明变量,则必须使用
在给定的程序err中声明并用于将数据分配给。err根本不使用的值
您可以通过执行_赋值来避免此类错误
即
var _ = err
或使用err喜欢
if err != nil { fmt.Println(err.Error()) return }
以下代码可以解决问题,但我建议使用err检查错误
package main import ( "fmt" ) func main() { var ( err error dto = make(map[string]interface{}) ) _ = err dto[`thing`], err = getThings() fmt.Println(dto[`thing`]) } func getThings() (string, error) { return `the thing`, nil }
PS: 你必须使用你声明在函数内部的变量,但它的 好 ,如果你有未使用的全局变量。也可以使用未使用的函数参数。