1. 程式人生 > >golang變數作用域問題

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