func f()(string,error){
return "test scope of variable",nil
}
func main() {
var name string
if name,err := f();nil ==err{
println(name)
}
println(name)
fmt.Println("Hello, 世界")
}
上面的例子输出:
test scope of variable
=============(空行)
Hello, 世界
期望是:
test scope of variable
test scope of variable
Hello, 世界
原因分析:
golang一旦遇到:=这个符号,如果在不同一个作用域中,就会新定义个变量,如果在同一个作用域中,情况如下例所示:只定义没有定义过的变量:
package main
import "fmt"
func f()(str string){
ok,str := f2()
if ok{
return
}
return "f()"
}
func f2()(b bool,str string){
return true,"f2()"
}
func main() {
str := f()
fmt.Println(str)
}
输出:f2()