1. 程式人生 > >go語言基本語法:變量的聲明

go語言基本語法:變量的聲明

相同 沖突 mode 集合 string del 之前 存儲 lock

一、變量的使用

1.1 什麽是變量

變量是為存儲特定類型的值而提供給內存位置的名稱。在go中聲明變量有多種語法。

所以變量的本質就是一小塊內存,用於存儲數據,在程序運行過程中數值可以改變

1.2 聲明變量

var名稱類型是聲明單個變量的語法。

  • 以字母或下劃線開頭,由一個或多個字母、數字、下劃線組成

聲明一個變量

第一種,指定變量類型,聲明後若不賦值,使用默認值

var name type
name = value

第二種,根據值自行判定變量類型(類型推斷Type inference)

如果一個變量有一個初始值,Go將自動能夠使用初始值來推斷該變量的類型。因此,如果變量具有初始值,則可以省略變量聲明中的類型。

var name = value

第三種,省略var, 註意 :=左側的變量不應該是已經聲明過的(多個變量同時聲明時,至少保證一個是新變量),否則會導致編譯錯誤(簡短聲明)

name := value
?
// 例如
var a int = 10
var b = 10
c : = 10
這種方式它只能被用在函數體內,而不可以用於全局變量的聲明與賦值

示例代碼:

package main
var a = "Hello"
var b string = "World"
var c bool
?
func main(){
    println(a, b, c)
}

運行結果:

Hello World false

多變量聲明

第一種,以逗號分隔,聲明與賦值分開,若不賦值,存在默認值

var name1, name2, name3 type
name1, name2, name3 = v1, v2, v3

第二種,直接賦值,下面的變量類型可以是不同的類型

var name1, name2, name3 = v1, v2, v3

第三種,集合類型

var (
    name1 type1
    name2 type2
)

1.3 註意事項

  • 變量必須先定義才能使用

  • go語言是靜態語言,要求變量的類型和賦值的類型必須一致。

  • 變量名不能沖突。(同一個作用於域內不能沖突)

  • 簡短定義方式,左邊的變量名至少有一個是新的

  • 簡短定義方式,不能定義全局變量。

  • 變量的零值。也叫默認值。

  • 變量定義了就要使用,否則無法通過編譯。

如果在相同的代碼塊中,我們不可以再次對於相同名稱的變量使用初始化聲明,例如:a := 20 就是不被允許的,編譯器會提示錯誤 no new variables on left side of :=,但是 a = 20 是可以的,因為這是給相同的變量賦予一個新的值。

如果你在定義變量 a 之前使用它,則會得到編譯錯誤 undefined: a。如果你聲明了一個局部變量卻沒有在相同的代碼塊中使用它,同樣會得到編譯錯誤,例如下面這個例子當中的變量 a:

func main() {
   var a string = "abc"
   fmt.Println("hello, world")
}

嘗試編譯這段代碼將得到錯誤 a declared and not used

此外,單純地給 a 賦值也是不夠的,這個值必須被使用,所以使用

在同一個作用域中,已存在同名的變量,則之後的聲明初始化,則退化為賦值操作。但這個前提是,最少要有一個新的變量被定義,且在同一作用域,例如,下面的y就是新定義的變量

package main
?
import (
    "fmt"
)
?
func main() {
    x := 140
    fmt.Println(&x)
    x, y := 200, "abc"
    fmt.Println(&x, x)
    fmt.Print(y)
}

運行結果:

0xc04200a2b0
0xc04200a2b0 200
abc

go語言基本語法:變量的聲明