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 如果採用這種方式的話,型別會自動推導,因此資料型別可以省略掉,以簡化工作...