Go語言是靜態型別語言,因此變數(variable)是有明確型別的,編譯器也會檢查變數型別的正確性,在數學概念中,變數表示沒有固定值且可改變的數,但從計算機系統實作角度來看,變數是一段或多段用來存盤資料的記憶體,
1、變數是什么?
變數指定了某存盤單元(Memory Location)的名稱,該存盤單元會存盤特定型別的值,在 Go 中,有多種語法用于宣告變數,
2、宣告單個變數
(2.1)var name type 宣告單個變數的語法
package main
import "fmt"
func main() {
// 變數宣告
var age int
fmt.Println("my age is", age)
}
在線運行程式
my age is 0
陳述句 var age int 宣告了一個 int 型別的變數,名字為 age,我們還沒有給該變數賦值,如果變數未被賦值,Go 會自動地將其初始化,賦值該變數型別的零值(Zero Value),本例中 age 就被賦值為 0,如果你運行該程式,
變數可以賦值為本型別的任何值,上一程式中的 age 可以賦值為任何整型值(Integer Value),
package main
import "fmt"
func main() {
// 變數宣告
var age int
fmt.Println("my age is", age)
// 賦值
age = 29
fmt.Println("my age is", age)
// 賦值
age = 35
fmt.Println("my age is", age)
}
在線運行程式
my age is 0
my age is 29
my age is 35
(2.2)宣告變數并初始化
宣告變數的同時可以給定初始值
var name type = initialvalue 的語法用于宣告變數并初始化,
package main
import "fmt"
func main() {
// 宣告變數并初始化
var age int = 29
fmt.Println("my age is", age)
}
在線運行程式
my age is 29
在上面的程式中,age 是具有初始值 29 的 int 型別變數,如果你運行上面的程式,你可以看見下面的輸出,證實 age 已經被初始化為 29,
(2.3)型別推斷(Type Inference)
如果變數有初始值,那么 Go 能夠自動推斷具有初始值的變數的型別,因此,如果變數有初始值,就可以在變數宣告中省略 type,
如果變數宣告的語法是 var name = initialvalue,Go 能夠根據初始值自動推斷變數的型別,
在下面的例子中,你可以看到在第 6 行,我們省略了變數 age 的 int 型別,Go 依然推斷出了它是 int 型別,
package main
import "fmt"
func main() {
var age = 29 // 可以推斷型別
fmt.Println("my age is", age)
}
3、宣告多個變數
(3.1)Go 能夠通過一條陳述句宣告多個變數, 宣告多個變數的語法是 var name1, name2 type = initialvalue1, initialvalue2,
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
(3.2)在有些情況下,我們可能會想要在一個陳述句中宣告不同型別的變數,其語法如下:
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)
}
在線運行程式
my name is naveen , age is 29 and height is 0
這里我們宣告了 string 型別的 name、int 型別的 age 和 height
4、簡短宣告(推薦使用)
(4.1)Go 也支持一種宣告變數的簡潔形式,稱為簡短宣告(Short Hand Declaration),該宣告使用了 := 運算子,
宣告變數的簡短語法是 name := initialvalue,
package main
import "fmt"
func main() {
name, age := "naveen", 29 // 簡短宣告
fmt.Println("my name is", name, "age is", age)
}
在線運行程式
my name is naveen age is 29
簡短宣告要求 := 運算子左邊的所有變數都有初始值,下面程式將會拋出錯誤 cannot assign 1 values to 2 variables,這是因為 age 沒有被賦值
(4.2)簡短宣告的語法要求 := 運算子的左邊至少有一個變數是尚未宣告的,考慮下面的程式:
package main
import "fmt"
func main() {
a, b := 20, 30 // 宣告變數a和b
fmt.Println("a is", a, "b is", b)
b, c := 40, 50 // b已經宣告,但c尚未宣告
fmt.Println("b is", b, "c is", c)
b, c = 80, 90 // 給已經宣告的變數b和c賦新值
fmt.Println("var b is", b, "c is", c)
}
在線運行程式
a is 20 b is 30
b is 40 c is 50
changed b is 80 c is 90
但是如果我們運行下面的程式:
package main
import "fmt"
func main() {
a, b := 20, 30 // 宣告a和b
fmt.Println("a is", a, "b is", b)
a, b := 40, 50 // 錯誤,沒有尚未宣告的變數
}
在線運行程式
上面運行后會拋出 no new variables on left side of := 的錯誤,這是因為 a 和 b 的變數已經宣告過了,:= 的左邊并沒有尚未宣告的變數,
變數也可以在運行時進行賦值,考慮下面的程式:
package main
import (
"fmt"
"math"
)
func main() {
a, b := 145.8, 543.8
c := math.Min(a, b)
fmt.Println("min mum value is ", c)
}
在線運行程式
min mum value is 145.8
(4.3)由于 Go 是強型別(Strongly Typed)語言,因此不允許某一型別的變數賦值為其他型別的值,下面的程式會拋出錯誤 cannot use "naveen" (type string) as type int in assignment,這是因為 age 本來宣告為 int 型別,而我們卻嘗試給它賦字串型別的值,
package main
func main() {
age := 29 // age是int型別
age = "wide" // 錯誤,嘗試賦值一個字串給int型別變數
}
總結
1、Go語言的變數宣告的標準格式為:
var 變數名 變數型別
變數宣告以關鍵字 var 開頭,后置變數型別,行尾無須分號,
2、批量格式:
覺得每行都用 var 宣告變數比較煩瑣?沒關系,還有一種為懶人提供的定義變數的方法:
var (
a int
b string
c []float32
d func() bool
e struct {
x int
}
)
使用關鍵字 var 和括號,可以將一組變數定義放在一起,
3、簡短格式
除 var 關鍵字外,還可使用更加簡短的變數定義和初始化語法
名字 := 運算式
需要注意的是,簡短模式(short variable declaration)有以下限制:
(1)、定義變數,同時顯式初始化,
(2)、不能提供資料型別,
(3)、只能用在函式內部,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/27344.html
標籤:Go
上一篇:Go語言庫系列之aurora
