golang变量作用域问题

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()

相关文章

什么是Go的接口? 接口可以说是一种类型,可以粗略的理解为他...
1、Golang指针 在介绍Golang指针隐式间接引用前,先简单说下...
1、概述 1.1 Protocol buffers定义 Protocol buffe...
判断文件是否存在,需要用到"os"包中的两个函数: os.Stat(...
1、编译环境 OS :Loongnix-Server Linux release 8.3 CPU指...
1、概述 Golang是一种强类型语言,虽然在代码中经常看到i:=1...