Go 語言變數

2021-09-13 01:40:23 字數 1848 閱讀 1159

go 語言變數名由字母、數字、下劃線組成,其中首個字元不能為數字。宣告變數的一般形式是使用 var 關鍵字:

var identifier type
變數宣告

第二種,根據值自行判定變數型別。

第三種,省略 var, 注意 := 左側需要宣告新的變數,否則就會產生編譯錯誤

package main

import "fmt"

var name string = "bbc"

var name2 = "bbq"

func main()

多變數宣告

//型別相同多個變數, 非全域性變數

var name1, name2, name3 type

name1, name2, name3 = "name1", "name2", "name3"

name1, name2, name3 := "name1", "name2", "name3" //出現在:=左側的變數不應該是已經被宣告過的,否則會導致編譯錯誤。

var (

name1 type1

name2 type2

)

值型別和引用型別

所有像 int、float、bool 和 string 這些基本型別都屬於值型別,使用這些型別的變數直接指向存在記憶體中的值

當使用等號 = 將乙個變數的值賦值給另乙個變數時,如:j = i,實際上是在記憶體中將 i 的值進行了拷貝

可以通過 &i 來獲取變數 i 的記憶體位址,例如:0xf840000040(每次的位址都可能不一樣)。值型別的變數的值儲存在棧中。

記憶體位址會根據機器的不同而有所不同,甚至相同的程式在不同的機器上執行後也會有不同的記憶體位址。因為每台機器可能有不同的儲存器布局,並且位置分配也可能不同。

更複雜的資料通常會需要使用多個字,這些資料一般使用引用型別儲存。

乙個引用型別的變數 r1 儲存的是 r1 的值所在的記憶體位址(數字),或記憶體位址中第乙個字所在的位置。

這個記憶體位址為稱之為指標,這個指標實際上也被存在另外的某乙個字中。

同乙個引用型別的指標指向的多個字可以是在連續的記憶體位址中(記憶體布局是連續的),這也是計算效率最高的一種儲存形式;也可以將這些字分散存放在記憶體中,每個字都指示了下乙個字所在的記憶體位址。

當使用賦值語句 r2 = r1 時,只有引用(位址)被複製。

如果 r1 的值被改變了,那麼這個值的所有引用都會指向被修改後的內容

使用 := 賦值操作符

在變數的初始化時省略變數的型別而由系統自動推斷,宣告語句寫上 var 關鍵字其實是顯得有些多餘了,因此我們可以將它們簡寫為 a := 50 或 b := false。

a 和 b 的型別(int 和 bool)將由編譯器自動推斷。

這是使用變數的首選形式,但是它只能被用在函式體內,而不可以用於全域性變數的宣告與賦值。使用操作符 := 可以高效地建立乙個新的變數,稱之為初始化宣告。

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

如果你在定義變數 a 之前使用它,則會得到編譯錯誤 undefined: a。

如果你宣告了乙個區域性變數卻沒有在相同的**塊中使用它,同樣會得到編譯錯誤。

全域性變數是允許宣告但不能使用。 同一型別的多個變數可以宣告在同一行,如:

var a, b, c int

Go語言變數

可以包含字幕,數字,下劃線。必須是字幕或者下劃線開頭 下劃線不建議 不能是關鍵字。首字母大寫為公有變數,可以被外包應用,小寫為私有變數,只可以在包內使用。1 var 變數名 型別名 變數值 2 自動推導型別 變數名 變數值 go語言函式支援多個返回值,當某個返回值不需要時,可以用匿名變數下劃線 接收...

GO語言 變數

宣告方式 var name type和c c 中 type name extern type name 在go語言中所有形式變數名稱都在型別的前面,這點和c c 是反過來的。注意如果區域性變數c c 會是乙個隨機值,而go語言會初始化為0 定義方式 var n int 10 n 10這兩行是等價的。...

GO語言變數

1.變數的宣告和初始化 在go語言中,變數使用關鍵字var進行宣告,具體格式為 var 變數名1,變數名2 資料型別 初始值1,初始值2 以上方式需要確保變數的資料型別相同,如果是多個不同型別的變數,也可以使用如下方式 var 如果採用這種方式的話,型別會自動推導,因此資料型別可以省略掉,以簡化工作...