站長資訊網
        最全最豐富的資訊網站

        go語言變量有幾種作用域

        go語言變量有2種作用域:1、局部變量,是在函數級別和塊級別內聲明的變量;局部變量只能在它們的塊或函數中訪問,已經聲明的局部變量不能在同一塊或函數中重新聲明。2、全局變量,是在包級別聲明的變量;全局變量在程序的整個生命周期中都可用,不能使用“:=”運算符聲明全局變量。

        go語言變量有幾種作用域

        本教程操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

        變量聲明的位置

        Go語言變量聲明的位置有三種級別:

        • 包(package)級別:變量在函數外聲明
        • 函數級別:變量在函數內,包括函數的傳參參數變量,但在代碼塊外聲明
        • 塊級別:這個分兩種,一種是顯式,會使用大括號{}括起來的代碼;另一種是隱式,如for,if后的初始化表達式。

        變量位置示例

        package main  import "fmt"  var test = "test"  //在函數外,包級別變量  func main() {     a, b := 1, 2  //a和b,c在main函數內定義,函數級別變量     c := sum(a, b)     fmt.Println(c)     fmt.Println(test)      for i := 0; i < 10; i++ {   //i為for循環內定義,為隱式塊級別變量         var d = i + 1    //d在for的循環體內,以大括號{}括起來,為顯式塊級別變量         fmt.Println(d)     }  }  func sum(a, b int) int {   //函數參數a和b,在函數內定義,為函數級別變量     fmt.Println(a)     fmt.Println(b)     nu := a + b     return nu }
        登錄后復制

        變量作用域

        變量聲明的位置決定了變量允許在什么地方被訪問以及變量的聲明周期。變量的可訪問范圍稱為變量的作用域。Go語言中,變量的作用域分為兩類:

        • 局部變量,也稱為本地變量
        • 全局變量

        局部變量

        在函數級別和塊級別內聲明的變量為局部變量。局部變量有以下特征:

        • 局部變量只能在它們的塊或函數中訪問。
        • 局部變量的生命周期只到塊或聲明它們的函數的末尾。之后,它們被垃圾回收器回收。
        • 已經聲明的局部變量,不能在同一塊或函數中重新聲明。

        示例:

        package main  import "fmt"  func main() {     var a= "astrng"     fmt.Println(a)     for i := 0; i < 10; i++ {         fmt.Println(i)     }     fmt.Println(i) }  func testLocal() {     fmt.Println(a) }
        登錄后復制

        這個代碼編譯時會報錯:

        undefined: i undefined: a
        登錄后復制

        原因:

        i:為for循環體內的塊級別的局部變量,在定義它的for循環體外訪問,就會報undefined。

        a:為main函數級別的局部變量,在testLocal函數內無法訪問,會報undefined錯誤。

        全局變量

        在包級別聲明的變量為全局變量。全局變量有以下特征:

        • 全局變量以小寫開頭時,此全局變量只能在定義它的包(package)內使用。即變量在包內可見。
        • 全局變量以大寫開頭時,此全局變量可以跨不同包(package)之間使用。即變量在所有地方可見。
        • 全局變量在程序的整個生命周期中都可用。
        • 不能使用:=運算符聲明全局變量。

        package main  import "fmt"  var a = "astring"  func main() {     testGlobal() }  func testGlobal() {     fmt.Println(a)  //運行結果是,正確打印出a的值“astring” }
        登錄后復制

        局部變量和全局變量同名

        Go語言程序中全局變量與局部變量名稱可以相同,但是函數體內的局部變量會被優先考慮。

        package main import "fmt" //聲明全局變量 var a float32 = 3.14 func main() {     //聲明局部變量     var a int = 3     fmt.Printf("a = %dn", a) }
        登錄后復制

        運行結果如下所示:

        a = 3
        登錄后復制

        Go語言是運行局部變量和全局變量同名,同名的變量在局部作用域范圍,它將遮蔽外部作用域中的變量。

        package main  import "fmt"  var a = "globala"  func main() {     var a = "locala"     fmt.Println(a)  //此處的a會遮蔽外面定義的a全局變量,輸出locala } func testGlobal() {   fmt.Println(a)  //此處是全局變量a,輸出globala }
        登錄后復制

        go語言變量有幾種作用域

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产精品夜色一区二区三区| 久久99国产精品99久久| 国产精品久久久久无码av| 国内精品久久久久| 欧美精品亚洲人成在线观看| 日产精品久久久一区二区| 93精91精品国产综合久久香蕉| 无码人妻精品一区二区三18禁| 欧美精品人爱a欧美精品| 大伊香蕉精品一区视频在线 | 成人国产精品高清在线观看| 无码人妻精品一区二 | 亚洲中文精品久久久久久不卡| 2021国产精品成人免费视频| 国产精品久久精品| 刺激无码在线观看精品视频| 爽爽精品dvd蜜桃成熟时电影院| 国产成人无码精品一区二区三区| 亚洲麻豆精品国偷自产在线91| 国产精品极品| 四虎精品成人免费观看| 国产精品日韩欧美制服| 欧美精品综合视频一区二区| 国产精品jizz视频| 亚洲一日韩欧美中文字幕欧美日韩在线精品一区二 | 69堂国产成人精品视频不卡| 99热成人精品国产免男男| 亚洲精品高清在线| 精品无码国产自产拍在线观看蜜| 国产在线精品网址你懂的| 日韩精品一区二区三区视频| sihu国产精品永久免费| 亚洲精品线路一在线观看| 国产高清精品在线| 99久久免费国产精精品| 日本精品视频在线观看| 99久久精品九九亚洲精品| 国产成人无码久久久精品一 | 精品欧美一区二区三区久久久| www国产精品| 99视频在线观看精品|