天天看點

Golang |常量

常量

定義

常量

是一個簡單值的辨別符,在程式運作時,不會被修改的量。常量使用一個名稱來綁定一塊記憶體位址,該記憶體位址中存放的資料類型由定義常量時指定的類型來決定,并且該記憶體位址裡面存放的值是不可以被改變的,

Go語言中的常量分為:

布爾型

字元串類型

數值型

常量一般存儲在程式的隻讀段裡。

字面常量

字面常量通常指的是程式中寫死的常量:

如:

66 數值常量

3.1415926 浮點型常量

1.8 + 66i 複數類型的常量

true 布爾類型常量

"cat" 字元串常量

字面常量在Go語言程式中是無類型的,隻要這個常量在相應類型的值域範圍内,就可以做為該類型的常量。比如:66 就可以指派給 :

int

uint

int32

int64

float32

float64

complex64

complex128

等。

常量的定義

Go語言的常量的定義可以限定常量類型,但是也可以不用,它和變量一樣,如果定義的時候,沒有指定類型,那麼程式運作中,會概把字面常量把常量的類型給推導出來。

顯式類型定義

顯示定義常量,就是把常量的類型寫出來。

const PATH string = "http://www.baidu.com"  //定義一個百度網址常量字元串
    const PI float64 = "3.1415926"  //定義一個圓周率的常量
           

隐式類型定義

隐式寫義常量就是定義的時候不寫類型。

const NAME = "張三"   //不寫變量的類型
    const SIZE = 1024      
           

Go語言的常量可以定義的時候,右值也可以是一個編譯期的運算的常量表式。如:

const num = 2 << 2
           

這是因為常量的指派是在編譯期進行的,是以可以出現也是編譯期運作的常量的表達式,但是如果是編譯期值還在變動的是不行的。

批量定義常量

如果我們在定義十多個常量的時候還每一個常量都寫一個

const

的話,那效率真的是太慢了。是以我們有下面的辦法批量定義常量。

const(
    a = 1
    b = 2
    c = 3
)
           

根據上面的方法,我們可以批量的定義一組常量,并且還好管理,我們可以把同一類型的常量定義到一個const裡面,這樣可以使得代碼更加的清晰。

預定義常量

Go語言裡面預定義了一些常量,如:

true

false

iota

其中

iota

比較特殊,它可以被認為是一個可以被預編譯的常量,在每一個

const

關鍵字出現的時候被重置為0,然後在下一個

const

出現之前,每出現一次

iota

,其所代表的數字都會自動增加1。

//我們一般結合着const()來使用iota
//如些上面的代碼就可以改為
const(
    a = iota    //0
    b = iota    //1
    c = iota    //2
)
           

這和上面的代碼的效果是一樣的。

也可以這樣寫:

const(
    a = iota    //0
    b            //1
    c            //2
)
           

這樣可以更加的簡單一點,并且這樣是因為,Go語言裡面如果一組常量裡面,如果某個常量 沒有初始值,那麼預設和上一行一緻。

我們還可以在這裡面運用表達式。

const(
    a = 1 << iota   //0
    b                   //2
    c                   //4
)
           

枚舉

Go語言

沒有專門來定義

枚舉類型

的關鍵字,是以我們用

枚舉類型

的時候,都是用

常量

來定義的。例:

const(
    MONDAY = 1 + iota
    TUESDAY
    WEDNESDAY
    THURSDAY
    FRIDAY
    SATURDAY
    SUNDAY
)
           

上面是一個星期的枚舉類型的定義。

我的公衆号

Golang |常量

細節決定成敗!

個人愚見,如有不對,懇請斧正!