Go 中未使用的变量

Jim*_*oto 1 go

以下代码生成编译错误:“声明错误但未使用”。如果这里存在范围/阴影问题,那是由于我不理解的原理。有人可以解释一下吗?

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
}
Run Code Online (Sandbox Code Playgroud)

Sar*_*lai 6

这不是因为有任何阴影。err除了为它赋值之外,您还没有使用任何声明的变量。

根据常见问题解答

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

如果声明一个变量,则必须使用它

在给定的程序中err已声明并用于将数据分配给 。err根本不使用 的值

您可以通过执行 _ 赋值来绕过此类错误

IE,

  var _ = err
Run Code Online (Sandbox Code Playgroud)

或使用err

  if err != nil {
      fmt.Println(err.Error())
      return
  }
Run Code Online (Sandbox Code Playgroud)

下面的代码可以解决这个问题,但我建议使用 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
}
Run Code Online (Sandbox Code Playgroud)

PS:您必须使用在函数内部声明的变量,但如果您有未使用的全局变量也没关系。拥有未使用的函数参数也是可以的。