go語言變數的宣告與賦值

fzeyu發表於2019-03-11

變數的宣告

標準格式

var 變數名 變數型別

批量格式

var (
    a int
    b string
    c []float32
    d func() bool
    e struct {
        x int
    }
)
    var a int
    var b string
    var c []float32
    var d func() bool
    var e struct{
        x int
    }

Go語言變數的初始化

預設值:

整型和浮點型變數的預設值為 0。
字串變數的預設值為空字串。
布林型變數預設為 bool。
切片、函式、指標變數的預設為 nil。

變數初始化的標準格式

var 變數名 型別 = 表示式
var hp int = 100
上面程式碼中,100 和 int 同為 int 型別,int 可以認為是冗餘資訊,因此可以進一步簡化初始化的寫法。

編譯器推導型別的格式

在標準格式的基礎上,將 int 省略後,編譯器會嘗試根據等號右邊的表示式推導 hp 變數的型別。
var hp = 100

    var defence = 20
    var damageRate float32 = 0.17
    var damage = float32(attack-defence) * damageRate
    fmt.Println(damage)

第 4 行,將 attack 和 defence 相減後的數值結果依然為整型,使用 float32() 將結果轉換為 float32 型別,再與 float32 型別的 damageRate 相乘後,damage 型別也是 float32 型別。
提示:damage 變數的右值是一個複雜的表示式,整個過程既有 attack 和 defence 的運算還有強制型別轉換。

短變數宣告並初始化

var 的變數宣告還有一種更為精簡的寫法,例如:
hp := 100
注意:由於使用了:=,而不是賦值的=,因此推導宣告寫法的左值變數必須是沒有定義過的變數。若定義過,將會發生編譯錯誤。

Go語言多個變數同時賦值

變數交換

    var b int = 200
    b, a = a, b
    fmt.Println(a, b)```
### Go語言匿名變數
在使用多重賦值時,如果不需要在左值中接收變數,可以使用匿名變數
```func GetData() (int, int) {
        return 100, 200
    }
    a, _ := GetData()
    _, b := GetData()
    fmt.Println(a, b)```
程式碼執行結果:
100 200

**注意:**匿名變數不佔用名稱空間,不會分配記憶體。匿名變數與匿名變數之間也不會因為多次宣告而無法使用。

相關文章