這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
變數也是語言的基本元素,與GO語言的常量類似,常量使用const關鍵字修飾,而變數使用var關鍵字修飾,變數聲明的形式為var variableName variableType
一、變數聲明
var age int
var phone int
var name string
var address string
var salary float64
var consume float64
var array [10]int
var frieds [20]string
每個變數聲明都使用一個var,上面的例子中能否能減少var的個數嗎?前面說過GO是最懂程式員的,所以當然可以簡寫為:
var (
聽 聽age 聽 聽 int
聽 聽phone 聽 int
聽 聽name 聽 聽string
聽 聽address string
聽 聽salary 聽float64
聽 聽consume float64
聽 聽array 聽 [10]int
聽 聽frieds 聽[20]string
)
上面儘管只用了一個var來聲明,但變數的行數並沒有減少,細心的讀者可能發現有兩個int、兩個string和兩個float64,能否合并呢?答案是可以:
var (
聽 聽 age, phone 聽 聽 聽 int
聽 聽 name, address 聽 聽 string
聽 聽 salary, consume 聽 聽float64
聽 聽 array 聽 聽 聽 聽 聽 [10]int
聽 聽 frieds 聽 聽 聽 聽 聽[20]string
)
當類型相同時就可以按var variable1,variable2,variable3,variable4聽variableType這種形式聲明了
二、變數聲明時的預設值
1、變數預設值
運行上面的程式可以發現int變數預設賦值為0,string變數預設賦值為空白串(所以列印出來看不見),float64變數預設賦值為0,int數組中的每個元素預設賦值為0,string數組中的每個元素預設賦值為空白串
在該例中儘管沒有定義複數類型,但不難推斷複數變數預設賦值為0+0i
2、變數聲明的實質
變數聲明實質上是申請一塊資料存放區空間並對其進行命名,這樣程式可以通過變數名來使用這Block Storage空間;GO編譯器在變數聲明時順便賦一個預設值
三、變數初始化
正如上例所示,變數聲明時編譯器會預設賦一個值,但這個值可能並不是我們想要的,所以我們可以在聲明的同時對變數進行初始化,其形式為var variableName variableType = value
var age int = 22
var phone int = 13581887557
var name string = "糾正哥"
var address string = "山東"
var salary float64 = 3030.30
var consume float64 = 1552.8
var array [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var frieds [3]string = [3]string{"山東", "李大朋", "13581887557"}
同變數聲明類似,可以節省var個數:
var (
聽 聽 age 聽 聽 int 聽 聽 聽 = 22
聽 聽 phone 聽 int 聽 聽 聽 = 13581887557
聽 聽 name 聽 聽string 聽 聽= "糾正哥"
聽 聽 address string 聽 聽= "山東"
聽 聽 salary 聽float64 聽 = 3030.30
聽 聽 consume float64 聽 = 1552.8
聽 聽 array 聽 [10]int 聽 = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
聽 聽 frieds 聽[3]string = [3]string{"山東", "李大朋", "13581887557"}
)
還可以減少行數:
var (
聽 聽 age, phone 聽 聽 聽int 聽 聽 聽 = 22, 13581887557
聽 聽 name, address 聽 string 聽 聽= "糾正哥", "山東"
聽 聽 salary, consume float64 聽 = 3030.30, 1552.8
聽 聽 array 聽[10]int 聽 = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
聽 聽 frieds 聽[3]string = [3]string{"山東", "李大朋", "13581887557"}
)
還可以去掉變數類型:
var (
聽 聽 age, phone 聽 聽= 22, 13581887557
聽 聽 name, address 聽= "糾正哥", "山東"
聽 聽 salary, consume = 3030.30, 1552.8
聽 聽 array 聽 聽 聽 = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
聽 聽 frieds 聽 聽 聽 = [3]string{"山東", "李大朋", "13581887557"}
)
哪有沒有更狠的呢?請讀者上眼:
age, phone := 22, 13581887557
name, address := "糾正哥", "山東"
salary, consume := 3030.30, 1552.8
array := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
frieds := [3]string{"山東", "李大朋", "13581887557"}
運行一下,小夥伴們都驚呆了,這樣竟然也行,是的,GO語言就是這麼任性
四、變數賦值
下面就是聲明一個變數之後的賦值過程:
var name string
name = "qingke"
舉例:
假如變數a和變數b都是整型,其中a的值為10,b的值為12,寫程式交換a和b的值
var a, b int a, b = 10, 12 // 變數賦值 fmt.Println("a = ", a, " b = ", b) a, b = b, a 聽// a和b的值互換 fmt.Println("a = ", a, " b = ", b) |
首次接觸GO的讀者可能發現,數字交換時竟然沒有引入中間變數!是的,GO就是這麼任性
五、變數聲明和初始化符(:=)
【例1】:先看一下小程式
var value1 int32 = 22
value2 := 22
fmt.Println(value1 == value2)
這裡先初始設定變數value1,它的類型為int32,然後再使用:=符對變數value2聲明並初始化,最後判斷value1和value2是否相等?
運行結果出乎意料,這裡拋出一個錯誤:說value2的類型與value1的類型不符,也就是說使用:=對變數value2進行初始化時,GO編譯器會根據變數值22自動推匯出一個int類型給value2;在GO語言中int、int32、int64被認為是不同的類型。
【例2】:再看一個小程式
var a int
a := 23
程式編譯時間會不會報錯呢?
從運行結果來看,使用:=變數的定義和初始化同時進行,第二個變數a與第一個變數a名稱衝突了。
本文出自 “青客” 部落格,請務必保留此出處http://qingkechina.blog.51cto.com/5552198/1615103