go不是動(dòng)態(tài)語(yǔ)言。go語(yǔ)言是Google開(kāi)發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語(yǔ)言,其變量(variable)是有明確類型的,編譯器也會(huì)檢查變量類型的正確性;因此在使用變量之前必須聲明數(shù)據(jù)類型需要,語(yǔ)法“var 變量名 變量類型”。
本教程操作環(huán)境:windows7系統(tǒng)、GO 1.18版本、Dell G3電腦。
go不是動(dòng)態(tài)語(yǔ)言,而是靜態(tài)語(yǔ)言。
Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開(kāi)發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型,并具有垃圾回收功能的開(kāi)源編程語(yǔ)言。
動(dòng)態(tài)語(yǔ)言和靜態(tài)語(yǔ)言介紹
-
動(dòng)態(tài)語(yǔ)言(弱類型語(yǔ)言)是運(yùn)行時(shí)才確定數(shù)據(jù)類型的語(yǔ)言,變量在使用之前無(wú)需申明類型,通常變量的值是被賦值的那個(gè)值的類型。比如Php、Asp、JavaScript、Python、Perl等等。
var s ="hello"; var i = 0; var b = true;
-
靜態(tài)語(yǔ)言(強(qiáng)類型語(yǔ)言)是編譯時(shí)變量的數(shù)據(jù)類型就可以確定的語(yǔ)言,大多數(shù)靜態(tài)語(yǔ)言要求在使用變量之前必須聲明數(shù)據(jù)類型。比如Java、C、C++、C#、Go等。
String s="hello"; //String 類型的變量 boolean b=true; //boolean 類型的變量 int i=0; //int 類型的變量
-
弱類型語(yǔ)言是數(shù)據(jù)類型可以被忽略的語(yǔ)言。它與強(qiáng)類型語(yǔ)言相反,一個(gè)變量可以賦不同數(shù)據(jù)類型的值。一個(gè)變量的類型是由其上下文決定的,效率更高。
-
強(qiáng)類型語(yǔ)言是必須強(qiáng)制確定數(shù)據(jù)類型的語(yǔ)言,一旦一個(gè)變量被指定了某個(gè)數(shù)據(jù)類型,如果不經(jīng)過(guò)強(qiáng)制轉(zhuǎn)換,那么它就永遠(yuǎn)是這種數(shù)據(jù)類型。一個(gè)變量的類型是申明的時(shí)候就已經(jīng)確定的,更安全。
Golang 變量的聲明(使用var關(guān)鍵字)
Go語(yǔ)言是靜態(tài)類型語(yǔ)言,因此變量(variable)是有明確類型的,編譯器也會(huì)檢查變量類型的正確性。在數(shù)學(xué)概念中,變量表示沒(méi)有固定值且可改變的數(shù)。但從計(jì)算機(jī)系統(tǒng)實(shí)現(xiàn)角度來(lái)看,變量是一段或多段用來(lái)存儲(chǔ)數(shù)據(jù)的內(nèi)存。
聲明變量的一般形式是使用 var 關(guān)鍵字:
var name type
-
var
是聲明變量的關(guān)鍵字 -
name
是變量名 -
type
是變量的類型
需要注意的是,Go語(yǔ)言和許多編程語(yǔ)言不同,它在聲明變量時(shí)將變量的類型放在變量的名稱之后。這樣做的好處就是可以避免像C語(yǔ)言中那樣含糊不清的聲明形式,例如:int* a, b; 。其中只有 a 是指針而 b 不是。如果你想要這兩個(gè)變量都是指針,則需要將它們分開(kāi)書(shū)寫(xiě)。而在 Go 中,則可以和輕松地將它們都聲明為指針類型:
var a, b *int
Go語(yǔ)言的基本類型有:
-
bool
-
string
-
int、int8、int16、int32、int64
-
uint、uint8、uint16、uint32、uint64、uintptr
-
byte // uint8 的別名
-
rune // int32 的別名 代表一個(gè) Unicode 碼
-
float32、float64
-
complex64、complex128
當(dāng)一個(gè)變量被聲明之后,系統(tǒng)自動(dòng)賦予它該類型的零值:int 為 0,float 為 0.0,bool 為 false,string 為空字符串,指針為 nil 等。所有的內(nèi)存在 Go 中都是經(jīng)過(guò)初始化的。
變量的命名規(guī)則遵循駱駝命名法,即首個(gè)單詞小寫(xiě),每個(gè)新單詞的首字母大寫(xiě),例如:numShips 和 startDate 。
變量的聲明有幾種形式,通過(guò)下面幾節(jié)進(jìn)行整理歸納。
標(biāo)準(zhǔn)格式
Go語(yǔ)言的變量聲明的標(biāo)準(zhǔn)格式為:
var 變量名 變量類型
變量聲明以關(guān)鍵字 var 開(kāi)頭,后置變量類型,行尾無(wú)須分號(hào)。
批量格式
覺(jué)得每行都用 var 聲明變量比較煩瑣?沒(méi)關(guān)系,還有一種為懶人提供的定義變量的方法:
var ( a int b string c []float32 d func() bool e struct { x int } )
使用關(guān)鍵字 var 和括號(hào),可以將一組變量定義放在一起。
簡(jiǎn)短格式
除 var 關(guān)鍵字外,還可使用更加簡(jiǎn)短的變量定義和初始化語(yǔ)法。
名字 := 表達(dá)式
需要注意的是,簡(jiǎn)短模式(short variable declaration)有以下限制:
-
定義變量,同時(shí)顯式初始化。
-
不能提供數(shù)據(jù)類型。
-
只能用在函數(shù)內(nèi)部。
和 var 形式聲明語(yǔ)句一樣,簡(jiǎn)短變量聲明語(yǔ)句也可以用來(lái)聲明和初始化一組變量:
i, j := 0, 1
下面通過(guò)一段代碼來(lái)演示簡(jiǎn)短格式變量聲明的基本樣式。
func main() { x:=100 a,s:=1, "abc" }
因?yàn)楹?jiǎn)潔和靈活的特點(diǎn),簡(jiǎn)短變量聲明被廣泛用于大部分的局部變量的聲明和初始化。var 形式的聲明語(yǔ)句往往是用于需要顯式指定變量類型地方,或者因?yàn)樽兞可院髸?huì)被重新賦值而初始值無(wú)關(guān)緊要的地方。
【