圖片來源 : System32Comics
變數可以用來暫存資料,宣告一個變數需滿足四個條件:
但是!!我們還是可以視情況省略其中部分,這也意味定義變數不只有一種方式。
var 宣告變數是最基本的方式,之後提出來的方法都是由它衍生出來的,
我們先來看看完整的Var宣告,它具備了上述四種條件:
var <變數名稱> <變數型別> = <值>
例如 :
var fruit String = "apple"
我們可以只用一個 var 同時宣告多個變數,而且每個變數型別不必一樣,
還可以有各自的初始值,寫法如下:
var (
<名稱 1> <型別 2> = <值 1>
<名稱 1> <型別 2> = <值 1>
...
<名稱 N> <型別 N> = <值 N>
)
例如 :
一口氣宣告三個變數
var (
customer1 String = "Ricky" //字串
male bool = true //boolean
startUpTime time.Time = time.Now() //time.Time結構
)
在一些嚴格規定的場合中,或許會需要在宣告套件範圍的變數時指定初始值,
同時嚴格控制型別,而需要完整寫法。
但在其餘場合,我們可以使用省略宣告變數的部分內容的方式。
變數宣告時並不需要同時寫型別或初始值,只要提及其中一個即可,Go語言會處理剩下的部分
如果變數宣告只給型別、沒給初始值,Go語言會自動位變數賦予該型別特有的零值(Zero Value)。
反之,給了初值而沒給型別,Go也會去根據初值去判斷該採用哪種型別。
例如 :
package main
import (
"fmt"
"time"
)
var(
customer1 = "Ricky" //省略型別
male bool // 省略初值
startUpTime = time.Now() //省略型別
)
func main() {
fmt.Println(male, customer1 , startUpTime)
}
執行結果 :
如此一來程式碼變得更精簡。
有時我們不得不在宣告變數時明確寫出每個環節,
尤其在某些狀況Go無法猜對你所需要的正確型別的時候。
如果是在函式中宣告變數,可以用 := 簡寫寫法進一步精簡,它省略了 var 與 型別。
ps. 只有在函式中才能這麼做
<名稱> := <值>
例如 :
package main
import (
"fmt"
"time"
)
func main() {
customer1 := "Ricky"
male := true
startUpTime := time.Now()
fmt.Println(male, customer1 , startUpTime)
}
這樣就變得非常精簡,在Go世界中也是常見變數定義方式,接下來介紹另一個同樣以短變數宣告,
一次搞定變數宣告的方式。
使用短變數宣告多重變數,寫法像醬 :
<變數1>, <變數2>, <變數3>, ...<變數N> := <值1>, <值2>, <值3> ...<值 N>
其實也蠻直觀,可以看的出來每個變數會有自己相對應的初始值,換句話說,宣告時要注意。
package main
import (
"fmt"
"time"
)
func main() {
customer1, male, startUpTime = "Ricky", true, time.Now()
fmt.Println(male, customer1 , startUpTime)
}
這樣閱讀性比較差一點,但當需要呼叫會回傳多個值得函式時,就可以使用了!
在這裡我們會需要一個函式,這個函式回回傳多個值,
我們再把它指定給多個新變數,如下:
package main
import (
"fmt"
"time"
)
func getConfig()(bool, string, time.Time) {
return false, "info", time.Now()
}
func main() {
male, customer1,startUpTime := getConfig()
fmt.Println(male, customer1 , startUpTime)
}
結果如下 :
var <變數1>, <變數2>, <變數3>...,<變數N> <型別>
var <變數1>, <變數2>, <變數3>...,<變數N> = <值>
package main
import (
"fmt"
"time"
)
func getConfig()(bool, string, time.Time) {
return false, "info", time.Now()
}
func main() {
//只提供型別
var start, middle, end float32
fmt.Println(start, middle , end)
//初始值的型別差異
var name, left, right, top, bottom = "one", 1, 1.1, 1.4, 2
fmt.Println(name, left , right, top, bottom)
//對函式一樣適用
male, customer1,startUpTime := getConfig()
fmt.Println(male, customer1 , startUpTime)
}
結果如下:
<變數> = <值>
package main
import (
"fmt"
)
func main() {
offset := 5
fmt.Println(offset)
offset = 10 //將5改為10
fmt.Println(offset)
}
像宣告多重變數一樣 :
<變數1>, <變數2>, <變數3>, ...<變數N> = <值1>, <值2>,...<值N>
一次更改多個變數值,如下:
package main
import (
"fmt"
)
func main() {
offset1, offect2, offect3 := 0, 1, 2
fmt.Println(offset1, offect2, offect3)
offset1, offect2, offect3 = 10, 11, 12
fmt.Println(offset1, offect2, offect3)
}
補充說明 :
正常來說我們不可以對已經宣告過的變數使用短變數宣告來賦值,但是有例外!!!
如果短變數宣告左側有多重變數,而當中有任一是之前沒有的新變數,這種寫法可以成立。
例如 :
新變數
以上就是變數大致整理的部分,下一篇會算符為主題~