欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長(zhǎng)資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          go語(yǔ)言變量有幾種作用域

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

          go語(yǔ)言變量有幾種作用域

          本教程操作環(huán)境:windows7系統(tǒng)、GO 1.18版本、Dell G3電腦。

          變量聲明的位置

          Go語(yǔ)言變量聲明的位置有三種級(jí)別:

          • 包(package)級(jí)別:變量在函數(shù)外聲明
          • 函數(shù)級(jí)別:變量在函數(shù)內(nèi),包括函數(shù)的傳參參數(shù)變量,但在代碼塊外聲明
          • 塊級(jí)別:這個(gè)分兩種,一種是顯式,會(huì)使用大括號(hào){}括起來(lái)的代碼;另一種是隱式,如for,if后的初始化表達(dá)式。

          變量位置示例

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

          變量作用域

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

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

          局部變量

          在函數(shù)級(jí)別和塊級(jí)別內(nèi)聲明的變量為局部變量。局部變量有以下特征:

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

          示例:

          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) }
          登錄后復(fù)制

          這個(gè)代碼編譯時(shí)會(huì)報(bào)錯(cuò):

          undefined: i undefined: a
          登錄后復(fù)制

          原因:

          i:為for循環(huán)體內(nèi)的塊級(jí)別的局部變量,在定義它的for循環(huán)體外訪問(wèn),就會(huì)報(bào)undefined。

          a:為main函數(shù)級(jí)別的局部變量,在testLocal函數(shù)內(nèi)無(wú)法訪問(wèn),會(huì)報(bào)undefined錯(cuò)誤。

          全局變量

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

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

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

          局部變量和全局變量同名

          Go語(yǔ)言程序中全局變量與局部變量名稱可以相同,但是函數(shù)體內(nèi)的局部變量會(huì)被優(yōu)先考慮。

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

          運(yùn)行結(jié)果如下所示:

          a = 3
          登錄后復(fù)制

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

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

          go語(yǔ)言變量有幾種作用域

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)