Go語言中的變量和常量

一、變量相關

1.變量聲明

C# : int a;

Go : var a int; 需要在前面加一個var關鍵字,後面定義類型

可以使用 var( a int; b string;)減少var

2.變量初始化

var a int = 10   // 正確的使用方式1
 
var a = 10       // 正確的使用方式2,編譯器可以自動推導出v2的類型
 
a := 10          // 正確的使用方式3,編譯器可以自動推導出v3的類型

在:=左側的變量不應該是已經被聲明過的

3.變量賦值

註意:Go語言的新特性 “Simultaneous Assignment” (平行賦值、多重賦值 ……)

a,b = b,a 可以方便的交換兩個數的值,之前的其他語言可能都需要加一個temp變量

對於這個我其實是有疑問的,就是Go語言是如何實現該功能的?按照我的想法如果是go語言底層也是按照加入一個變量的方式,那麼豈不是輸出的a和b都是b的值瞭?達不到交換的目的。

大概結論就是,這個賦值操作可以看成一個原子操作。

4.匿名變量

Go可以定義匿名變量來減少不需要的代碼,例如,我隻關心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);
       }
}

二、常量相關

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.預定義常量

Go語言預定義瞭這些常量:true、false和iota。

iota是個什麼玩意?

iota比較特殊,可以被認為是一個可被編譯器修改的常量,在每一個const關鍵字出現時被 重置為0,然後在下一個const出現之前,每出現一次iota,其所代表的數字會自動增1。 (一個計數器?)

例如:

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 這個東西用好瞭就能當枚舉使用瞭,正好Go語言不支持enum關鍵字

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: