Go

时间:2017-01-17 23:12:17

标签: 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
}

1 个答案:

答案 0 :(得分:3)

这不是因为任何阴影。您没有使用为任何事情声明的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:您必须使用在函数内声明的变量,但如果您有未使用的全局变量,则确定。拥有未使用的函数参数也是可以的。