Go語言中的變量和常量
一、變量相關(guān)
1.變量聲明
C# : int a;
Go : var a int; 需要在前面加一個var關(guān)鍵字,后面定義類型
可以使用 var( a int; b string;)減少var
2.變量初始化
var a int = 10// 正確的使用方式1 var a = 10 // 正確的使用方式2,編譯器可以自動推導(dǎo)出v2的類型 a := 10 // 正確的使用方式3,編譯器可以自動推導(dǎo)出v3的類型
在:=左側(cè)的變量不應(yīng)該是已經(jīng)被聲明過的
3.變量賦值
注意:Go語言的新特性 “Simultaneous Assignment” (平行賦值、多重賦值 ......)
a,b = b,a 可以方便的交換兩個數(shù)的值,之前的其他語言可能都需要加一個temp變量
對于這個我其實是有疑問的,就是Go語言是如何實現(xiàn)該功能的?按照我的想法如果是go語言底層也是按照加入一個變量的方式,那么豈不是輸出的a和b都是b的值了?達(dá)不到交換的目的。
大概結(jié)論就是,這個賦值操作可以看成一個原子操作。
4.匿名變量
Go可以定義匿名變量來減少不需要的代碼,例如,我只關(guān)心Value,不想打印Key的時候可以用“_”代替變量。同理對于有多個返回值的方法,可以用“_”代替我不想要的返回值,這樣就減少了變量的定義。
func main(){ x:=make(map[string]int16) x["apple"] =100 x["orange"] = 50 x["pear"]=500 for _,value := range x{ fmt.Println(value); } }
二、常量相關(guān)
1.字面常量
Go語言的字面常量是無類型的,可以被賦值給任何類型的變量。
例如 AConstNumber 可以賦值給int、float32等類型,但是賦值給string就出錯了
package main import ( "fmt") func main(){ const AConstNumber = -100 var x int = AConstNumber var y float32 = AConstNumber fmt.Println("x:",x) fmt.Println("y:",y) }
2.預(yù)定義常量
Go語言預(yù)定義了這些常量:true、false和iota。
iota是個什么玩意?
iota比較特殊,可以被認(rèn)為是一個可被編譯器修改的常量,在每一個const關(guān)鍵字出現(xiàn)時被 重置為0,然后在下一個const出現(xiàn)之前,每出現(xiàn)一次iota,其所代表的數(shù)字會自動增1。 (一個計數(shù)器?)
例如:
func main(){ const( a = iota *100 b = iota *100 c = iota *100 ) const( d = iota *100 e = iota *100 f = iota *100 ) fmt.Println(a) // 打印 0 fmt.Println(b) // 打印 100 fmt.Println(c) // 打印 200 fmt.Println(d) // 打印 0 fmt.Println(e) // 打印 100 fmt.Println(f) // 打印 200 }
所以 iota 這個東西用好了就能當(dāng)枚舉使用了,正好Go語言不支持enum關(guān)鍵字
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持本站。
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。