以下代码生成编译错误:“已声明并未使用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可能无法访问。终结器可能会在此