下面是代碼例子:
//go 變量
//申明包名main
package main
//導入包名
import(
"fmt"
)
var a int //聲明一個int類型的變量
var b struct{ //聲明一個結構體
name string
}
var c = 8 //聲明變量同時賦值
var ( //批量聲明變量,簡潔
d int
e string
)
var name1 int = 5 //1聲明變量name1,並且初始化
//一行申明多個變量
var f,g int
//同一行初始化多個變量,不同類型也可以,這裡默認初始化值,根據值進行定義了類型。
var h,i,j = 5,"abd",0.4
func main(){
name2 := "test" //2聲明變量並初始化值,這種賦值不能在函數外面進行賦值
//列印變量
fmt.Println(a,b,c,d,e,f,g,h,i,j)
fmt.Println(name1,name2)
}總結:
1、變量聲明(variable declaration)中的初始化表達式(initialization expressions)的求值順序(evaluation order)由初始化依賴(initialization dependencies)決定;但對於初始化表達式内部的操作數的求值需要按照2中的順序:從左到右。
2、在非變量初始化語句中,對表達式、賦值語句或返回語句中的操作數進行求值時,操作數中包含的函數(function)調用、方法(method)調用和通信操作(主要針對channel)將按語法從左到右的順序求值。
3、賦值語句求值分爲兩個階段,第一階段是等號左邊的index expressions、pointer indirections和等號右邊的表達式中的操作數的求值順序按照2中從左到右的順序;第二階段按從左到右的順序對變量賦值。
注意:
I. Go裡面不損失精度的情況下會把8.0這類浮點數視作整數8
II. Go裡面的常數是高精度數,分爲幾類。
有類型的:uint(8),類型顯式指定了,在表達式裡面不會變化。
無類型的:分成無類型整數和無類型浮點兩類。這兩類在使用的時候會根據上下文需要的類型轉化爲實際類型