聲明單一變量
聲明一個變量的語法為:var name type,例如
package main import "fmt" func main() { var age int // variable declaration fmt.Println("my age is", age) }
語句 var age int 聲明了一個類型為 int,名稱為 age 的變量。在這里我們沒有給它賦任何值。如果一個變量沒有被賦予任何值,Go 會自動將這個變量初始化為其類型的 0值,比如這里的 age 將被賦值為 0。運行這個程序,將得到如下輸出:
my age is 0
一個變量可以被賦予其類型的任何值。例如,在上例中,age 可以被賦予任何整型值:
package main import "fmt" func main() { var age int // variable declaration fmt.Println("my age is ", age) age = 29 //assignment fmt.Println("my age is", age) age = 54 //assignment fmt.Println("my new age is", age) }
輸出如下:
my age is 0 my age is 29 my new age is 54
聲明一個帶初值的變量
在聲明變量時可以指定其初始值。
聲明一個帶初值的變量的語法為:var name type = initialvalue,例如:
package main import "fmt" func main() { var age int = 29 // variable declaration with initial value fmt.Println("my age is", age) }
在上面的程序中, age 是一個 int 型的變量,初始值為 29。運行上面的程序,輸出如下。可以看到 age 的初始值確實為29。
my age is 29
類型推導
如果聲明一個變量時提供了初始值,Go可以根據該初始值來自動推導變量的類型。因此如果聲明變量時提供了初始值,就可以不必指定其類型。
也就是說,如果聲明變量的形式為:var name = initialvalue,Go將根據 initialvalue 自動推導變量 name 的類型。
在下面的例子中,你可以看到聲明變量 age 時並沒有指定其類型。因為 age 的初值為 29,Go 自動推斷其類型為 int。
package main import "fmt" func main() { var age = 29 // type will be inferred fmt.Println("my age is", age) }
多變量聲明
多個變量可以在一條語句中聲明。
多變量聲明的語法為:var name1, name2 type = initialvalue1, initialvalue2,例如:
package main import "fmt" func main() { var width, height int = 100, 50 //declaring multiple variables fmt.Println("width is", width, "height is", height) }
如果指定了初始值,則 type 可以省略。下面的程序利用類型推導聲明了多個變量:
package main import "fmt" func main() { var width, height = 100, 50 //"int" is dropped fmt.Println("width is", width, "height is", height) }
可以看到輸出結果為:
width is 100 height is 50
正如你猜想的那樣,如果不指定 width 和 height 的初值,它們將自動被賦值為 0,也就是說它們將以 0 作為初值:
package main import "fmt" func main() { var width, height int fmt.Println("width is", width, "height is", height) width = 100 height = 50 fmt.Println("new width is", width, "new height is ", height) }
將會輸出:
width is 0 height is 0 new width is 100 new height is 50
有些時候我們需要在一條語句中聲明多個不同類型的變量。我們可以使用下面的語法達到此目的:
var ( name1 = initialvalue1, name2 = initialvalue2 )
下面的程序就用上面的語法聲明了多個不同類型的變量:
package main import "fmt" func main() { var ( name = "naveen" age = 29 height int ) fmt.Println("my name is", name, ", age is", age, "and height is", height) }
這里我們聲明了一個字符串類型的變量 name,以及兩個整型的變量 age 和 height。(我們將在下一篇教程中討論 Golang 中可用的類型)。上面的程序將會產生如下輸出:
my name is naveen , age is 29 and height is 0
速記聲明
Go 提供了另一種簡潔的聲明變量的方式。這種方式稱為速記聲明(shorthand declaratiion)。速記聲明使用 := 操作符來聲明變量。
速記聲明的語法為:name := initialvalue,例如:
package main import "fmt" func main() { name, age := "naveen", 29 //short hand declaration fmt.Println("my name is", name, "age is", age) }
上面的程序,輸出如下:
my name is naveen age is 29
記聲明要求必須給聲明的每一個變量都提供初始值。下面的 程序將會報錯:assignment count mismatch: 2 = 1。這是因為 沒有給 age 提供初始值。
package main import "fmt" func main() { name, age := "naveen" //error fmt.Println("my name is", name, "age is", age) }
速記聲明要求在 := 的左邊必須至少有一個變量是新聲明的。
一個變量不能被賦予與其類型不同的值。下面的程序將報錯:cannot use "naveen" (type string) as type int in assignment。這是因為 age 被聲明為 int 類型,但是我們試圖將 string 類型的值賦給它。
package main func main() { age := 29 // age is int age = "naveen" // error since we are trying to assign a string to a variable of type int }
