天天看點

017-變量和零值

1. 變量

1.1 var 聲明

在 go 中,聲明變量的關鍵字是 ​

​var​

​,它的作用是建立一個特定類型的變量。使用方法:

var name type =      

例如:

var name string = "Allen"      

上面表示建立了一個類型為 ​

​string​

​ 的變量。go 語言聲明變量和 c/c++ 是反着來的,從 c 系風格切換過來的同學可能會有點不習慣。

使用 ​

​var​

​​ 聲明,可以省略掉『type』或者 『= express』中的一個,但是不能同時省略。你不能寫成 ​

​var name​

​.

如果省略 type,go 會根據初始值自動推導類型。

1.2 聲明一組變量

  • 同一種類型
var a, b, c int      
  • 不同類型

如果省略 type,則使用自動類型推導來聲明多個不同類型的變量。

var a, b, c = 12.5, true, "Allen"      

1.3 短變量聲明(short variable declarations)

在 go 中變量還有另一種聲明方式,前面我們使用的非常多,即短變量聲明,例如:

name := "Allen"      

go 可以通過初始值來推導 name 的類型。你隻能在函數裡采用這種寫法。

  • 一些細節

不允許對同一個名字重複使用短變量聲明。下面是錯誤的:

name := "Allen" // 可以
name := "Luffy" // 不可以,因為上面已經使用過了      

但是下面卻是可以的:

name := "Allen"
name, age := "Luffy", 18 // 可以,因為 age 是第一次聲明。      

一句話,短變量聲明的要求是 ​

​:=​

​ 左側至少有一個名字是第一次被聲明。

2. 零值

**在聲明變量的同時,需要為變量設定一個初始值。如果不顯式指定,go 會自動将該變量初始化為『零值』。**這意味着,go 中不存在沒有被初始化的變量!(這究竟是個好的特性還是壞的特性,答案在你心中)。

這一點明顯不同于 c 語言,聲明并定義一個變量如果不初始化,變量的值可能是個随機值。在 go 中就不怕了。例如:

var age int      

它聲明了一個 int 類型的變量,盡管沒有顯式初始化,但是是 go 會将其初始值設定為 int 類型的零值,即 0.

以下是常用類型對應的零值:

類型 零值
數值類型(int, int32等)

​0​

bool

​false​

string

​""​

接口類型

​nil​

引用類型(slice, map, chan, function)

​nil​

3. 總結

  • ​var​

    ​ 聲明
  • 聲明一組相同類型的變量
  • 聲明一組不同類型的變量(自動推導類型)
  • 短變量聲明
  • ​:=​

    ​ 的使用(自動推導類型)
  • 适用場合,局部變量
  • 零值
  • 不同類型的零值是多少