Golang 菜鳥教程

Golang 控制語句

Golang 函數(shù) & 方法

Golang 結構體

Golang 切片 & 數(shù)組

Golang 字符串(String)

Golang 指針

Golang 接口

Golang 并發(fā)

Golang 異常(Error)

Golang 其他雜項

Go 語言變量作用域

先決條件:Go 語言變量

變量的作用域可以定義為可訪問特定變量的程序的一部分??梢栽陬悾椒?,循環(huán)等中定義變量。像C / C ++一樣,在Golang中,所有的標識符都是詞法(或靜態(tài))作用域,即變量的作用域可以在編譯時確定?;蛘吣憧梢哉f一個變量只能從定義它的代碼塊中調用。

Golang變量的范圍規(guī)則可以分為兩類,具體取決于聲明變量的位置:

  • 局部變量(在塊或函數(shù)內部聲明)

  • 全局變量(在塊或函數(shù)外部聲明)

局部變量

  • 在函數(shù)或塊中聲明的變量稱為局部變量。這些不能在函數(shù)或塊之外訪問。

  • 這些變量也可以在函數(shù)內的for,while語句等內部聲明。

  • 但是,這些變量可以由函數(shù)內的嵌套代碼塊訪問。

  • 這些變量也稱為塊變量。

  • 如果在同一作用域中用相同的名稱聲明兩次這些變量,則會出現(xiàn)編譯時錯誤。

  • 函數(shù)執(zhí)行結束后,這些變量將不存在。

  • 在循環(huán)外聲明的變量也可以在嵌套循環(huán)內訪問。這意味著方法和所有循環(huán)都可以訪問全局變量。局部變量可被循環(huán)訪問,并在該函數(shù)內執(zhí)行函數(shù)。

  • 在循環(huán)體內聲明的變量對循環(huán)體外不可見。

//局部變量
package main
import "fmt"

//主函數(shù)
func main() {

    //從這里開始主函數(shù)的局部作用域
    //主函數(shù)內的局部變量
    var myvariable1, myvariable2 int = 69, 145

    // 顯示變量的值
    fmt.Printf("myvariable1 變量的值 : %d\n", myvariable1)

    fmt.Printf("myvariable2 變量的值 : %d\n", myvariable2)

} // 此處主要函數(shù)的局部作用域結束

輸出:

myvariable1 變量的值 : 69
myvariable2 變量的值 : 145

全局變量

  • 在函數(shù)或塊之外定義的變量稱為全局變量。

  • 這些在程序的整個生命周期中都可用。

  • 這些在所有函數(shù)或塊之外的程序頂部聲明。

  • 這些可以從程序的任何部分進行訪問。

//全局變量
package main
import "fmt"

// 全局變量聲明
var myvariable1 int = 100

func main() {

    // 主函數(shù)內部的局部變量
    var myvariable2 int = 200

    //顯示全局變量
    fmt.Printf("全局變量 myvariable1 的值是 : %d\n", myvariable1)

    //顯示局部變量
    fmt.Printf("局部變量 myvariable2 的值是 : %d\n", myvariable2)

    //調用函數(shù)
    display()

}

func display() {
    // 顯示全局變量
    fmt.Printf("全局變量 myvariable1 的值是 : %d\n", myvariable1)

}

輸出:

全局變量 myvariable1 的值是 : 100
局部變量 myvariable2 的值是 : 200
全局變量 myvariable1 的值是 : 100

注意:如果函數(shù)中存在與全局變量同名的局部變量,將會發(fā)生什么情況?

答案很簡單,即編譯器將優(yōu)先選擇局部變量。通常,當定義了兩個具有相同名稱的變量時,編譯器會產生編譯時錯誤。但是,如果變量在不同的范圍內定義,則編譯器會允許它。只要定義了與全局變量同名的局部變量,編譯器就會優(yōu)先考慮該局部變量。

示例:在下面的程序中,您可以清楚地看到輸出。由于myvariable1的值為200,這在函數(shù)main中給出。因此,可以說局部變量比全局變量具有更高的優(yōu)先級。

//Go程序顯示編譯器的優(yōu)先級
//全局變量上的局部變量
package main
import "fmt"

//全局變量聲明
var myvariable1 int = 100

func main() {

    //主函數(shù)內的局部變量
    //與全局變量相同
    var myvariable1 int = 200
    // 顯示
    fmt.Printf("變量 myvariable1 的值是 : %d\n", myvariable1)
}

輸出:

變量 myvariable1 的值是 : 200
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清