【发布时间】:2017-12-11 17:25:48
【问题描述】:
这段代码:
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, playground")
var a bool
var b interface{}
b = true
if a, ok := b.(bool); !ok {
fmt.Println("Problem!")
}
}
在 golang 操场上产生这个错误:
tmp/sandbox791966413/main.go:11:10: a declared and not used
tmp/sandbox791966413/main.go:14:21: a declared and not used
这很令人困惑,因为我们在简短的变量声明 golang docs 中读到:
与常规变量声明不同,短变量声明可以 重新声明变量,前提是它们最初是在 相同的块(如果块是函数,则为参数列表 body) 具有相同的类型,并且至少有一个非空白变量 是新的。因此,重新声明只能出现在 多变量短声明。重新声明并未引入 新变量;它只是为原始值分配一个新值。
所以,我的问题:
- 为什么我不能在上面的代码 sn-p 中重新声明变量?
-
假设我真的做不到,我真的喜欢做的是找到 一种用函数的输出填充变量的方法,同时 以更简洁的方式检查错误。那么有什么办法吗 改进以下形式以从 可出错的功能?
var A RealType if newA, err := SomeFunc(); err != nil { return err } else { A = newA }
【问题讨论】:
标签: go