十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
這篇“go語(yǔ)言變量的作用域是什么”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“go語(yǔ)言變量的作用域是什么”文章吧。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、重慶小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了通州免費(fèi)建站歡迎大家使用!
go語(yǔ)言變量有2種作用域:1、局部變量,是在函數(shù)級(jí)別和塊級(jí)別內(nèi)聲明的變量;局部變量只能在它們的塊或函數(shù)中訪問(wèn),已經(jīng)聲明的局部變量不能在同一塊或函數(shù)中重新聲明。2、全局變量,是在包級(jí)別聲明的變量;全局變量在程序的整個(gè)生命周期中都可用,不能使用“:=”運(yùn)算符聲明全局變量。
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
}
變量聲明的位置決定了變量允許在什么地方被訪問(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)
}
這個(gè)代碼編譯時(shí)會(huì)報(bào)錯(cuò):
undefined: i
undefined: a
原因:
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í)別聲明的變量為全局變量。全局變量有以下特征:
全局變量以小寫(xiě)開(kāi)頭時(shí),此全局變量只能在定義它的包(package)內(nèi)使用。即變量在包內(nèi)可見(jiàn)。
全局變量以大寫(xiě)開(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”
}
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 = %d\n", a)
}
運(yùn)行結(jié)果如下所示:
a = 3
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
}
以上就是關(guān)于“go語(yǔ)言變量的作用域是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。