当前位置: 首页 > 面试题库 >

Go中的可变阴影

曹鸿风
2023-03-14
问题内容

以下代码生成编译错误:“已声明并未使用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除了为变量赋值之外,您没有使用任何声明的变量。

根据常见问题

未使用的变量的存在可能表明存在错误,而未使用的导入只会减慢编译速度。在代码树中积累足够的未使用导入,事情可能会变得很慢。由于这些原因,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: 你必须使用你声明在函数内部的变量,但它的 ,如果你有未使用的全局变量。也可以使用未使用的函数参数。



 类似资料:
  • 问题内容: 在下面,我们有一个IIFE(像任何函数一样)创建本地作用域。在该范围内有一个功能。现在,由于浏览器中已经有一个具有该名称的全局函数,因此本地函数将使全局函数黯然失色-在IIFE中,任何对本地函数的调用都会调用本地函数,而不是全局函数。(仍可以使用引用全局函数。) 是否有 法律上的名称 (ECMAScript规范)或 事实上的 (通用的)名称?遮盖?超载? 问题答案: 正确的术语是[可变

  • 问题内容: 我对此Java代码有一些疑问。它给出的输出是“ furry bray”。我的问题: 为什么我得到此输出? 我如何访问ZooKeeper类中的字符串对象引用“名称”? 如果它与变量屏蔽有关,那么哪个变量正在被屏蔽? 码: 问题答案: 变量不是多态的。当您访问时,无论对象的执行时间类型如何,它都将 始终 使用属于该对象的字段。如果需要访问,则需要一个 编译时 类型为的表达式。 该方法实际上

  • 问题内容: 这是来自GOPL的示例-“表达式x [i]和x +’A’-‘a’分别引用外部块中x的声明;我们稍后将对此进行解释。” 解释永远不会到来。为什么x [i]引用外部范围中的x?只要在内部块中重新声明x,它就应该在外部块中遮盖x。为什么这样做? http://play.golang.org/p/NQxfkTeGzA 问题答案: 运算符创建一个新变量,并为其分配右侧值。 在for循环的第一个迭

  • 问题内容: 我想知道是否存在一种实现类似于map getter的功能的方法:它返回返回值作为第一个参数,(可选地分配)第二个值作为第二个参数。因此,我需要可以通过以下方式调用的函数: 问题答案: 不,它无法完成,唯一的选择是返回一个指针并检查它是否为nil。

  • 主要内容:可变参数类型,任意类型的可变参数,遍历可变参数列表——获取每一个参数的值,获得可变参数类型——获得每一个参数的类型,在多个可变参数函数中传递参数在C语言时代大家一般都用过 printf() 函数,从那个时候开始其实已经在感受可变参数的魅力和价值,如同C语言中的 printf() 函数,Go语言标准库中的 fmt.Println() 等函数的实现也依赖于语言的可变参数功能。 本节我们将介绍可变参数的用法。合适地使用可变参数,可以让代码简单易用,尤其是输入输出类函数,比如日志函数等。 可变

  • 问题内容: Go 1.7 beta 1今天早上发布,这是Go 1.7的发行说明草案 。新功能已添加到程序包中。的文档给出了一个示例: 的文档还给出了以下解释: 例如,如果p指向包含文件描述符d的结构,并且p具有关闭该文件描述符的终结器,并且函数中对p的最后使用是对syscall的调用。Write(pd,buf,size ),则一旦程序进入syscall.Write,p可能无法访问。终结器可能会在此