go語言學習-常量

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

下面一句摘自《Go語言編程》:

“go語言中,常量是無類型的。只要這個常量在相應類型的範圍範圍內,就可以作為該類型的常量,比如常量-12,它可以賦值給int、int32、int64、float32、float64、complex64、complex128等類型的變數。”

註:個人理解,這裡的“無類型”,個人理解是不固定類型,並不是真的沒有類型。

 

1、常量定義:const

go語言中常量定義和C++中的關鍵字一樣,直接用const關鍵字定義。

       不同的是,go中用const定義常量時,後面的常量類型不是必須的,個人感覺可以從2個方面理解:

       (1).如本檔案開頭所述,go語言中常量不固定類型,編譯器自己根據等號右邊的值確定類型;

       (2).也可以理解為const這個關鍵字和var類似,用關鍵字定義變數(常量)同時初始化的時候,可以不需要類型。

 

       常量定義必須是在編譯期能確定的值,如:

const tmpConst 1 << 3

由於1 << 3在編譯期可以確定值,所以這行命令沒問題,下面的命令會編譯出錯:

const Home = os.GetEnv(“HOME”)

這個命令要在運行GetEnv後得到值才能確定,所以這個命令編譯會出錯。

 

2、預定義常量

       go語言中預定義常量有:ture, false和iota。

 

ture和false比較容易理解,分別為邏輯真和邏輯假。

iota這個常量比較特殊,iota每次遇到const,就會被置位成0,如果遇到的不是const,則每出現一次iota,iota的值就增加1。如:

const (         //遇到const,iota被賦值成0

c0 = iota   //這時,tota == 0,所以c0 == 0,同時iota++,所以這個賦值完後iota== 1

c1 = iota   //c1 == 1

c2 = iota   //c2 == 2

)

 

       如果兩個const的指派陳述式的運算式是一樣的,那麼可以省略後面一個賦值運算式,編譯器會預設其和前面的運算式一樣。如:

const

(

c0 = iota

c1       //等價於c1 = iota

c2       //等價於c2 = iota

 

)

const

(

       c0= 3

       c1     //等價於c1 = 3

       c2     //等價於c2 = 3

)

 

3、枚舉

       go語言中並沒有提供enum關鍵字定義枚舉類型,要實現枚舉的功能,可以使用上一節中的 const +iota來實現。如:

const

(

    Sunday=iota

    Monday

    Tuesday

    Wednesday

    Thursday

    Friday

    Saturday

    numberOfDays//這個常量沒有匯出

)

註:go語言中,大寫字母開始的符號是“public”的,可以被包外看到,所以上面的numberOfDays只能在本包內可見。

  

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.