Go語言的常量

2021-09-10 12:47:56 字數 1566 閱讀 1750

go語言的常量是一種表示式,常量可以保證在編譯階段就計算出表示式的值。所有的常量本質上都屬於基本型別:數字、布林型、字串等。go語言的常量定義與變數類似,只不過使用了const關鍵字修飾,但不能使用短變數宣告關鍵字 := 來定義常量。

對於常量運算元,所有數**算、邏輯運算和比較運算的結果依然是常量,常量的轉換結果和某些內建函式的返回值(例如len、cap、real、imag、complex和unsafe.sizeof)同樣是常量。

常量宣告可以同時指定型別和值,如果沒有顯式指定型別,則型別根據右邊的表示式推斷。若同時宣告一組變數,除了第一項之外,其他項在等號右側的表示式都可以省略,這意味著會復用前面一項的表示式及其型別。

const (

a = 1

bc = 2

d)fmt.pritln(a, b, c, d) //1 1 2 2

常量的宣告可以使用常量生成器iota,它建立一系列相關值,常量宣告中iota從0開始取值,逐項加1,這與c++中的列舉型(enumeration)相同。下面是time包中對weekday型別的定義:

type weekday int

const (

sunday weekday = iota

monday

tuesday

wednesday

thursday

friday

saturday

)

上面的宣告中,sunday的值為0,monday為1,依此類推。

iota結合算術運算還有更複雜的應用,如表示1024的冪:

const (

_ = 1 << (10 * iota)

kbmb

gbtb

pb)

go語言的常量雖然可以是任何基本資料型別,但許多常量並不從屬某一具體型別。編譯器將這些從屬型別特定的常量表示成某些值,這些值比基本型別的精度更高,且算術精度高於原生的機器精度。可以認為它們的精度至少達到256位。從屬型別待定的常量共有6種,分別是無型別布林、無型別整數、無型別文字元號、無型別浮點數、無型別複數、無型別字串。

只有常量才可以是無型別的。若將無型別常量宣告為變數,或在型別明確的變數賦值的右方出現無型別常量,則常量會被隱式轉換為該變數的型別。

var f float64 = 3 + 0i //無型別複數→float64

f = 2 //無型別整數→int

推遲確定從屬型別使得無型別常量不僅能暫時維持更高的精度,與型別已確定的常量相比,它們還能寫進更多表示式而無須轉換型別。以下面的程式為例:

const (

x = 9223372036854775808

y = 20

)"%t\n", x)

fmt.println(x/y)

字面值常量的型別由語法決定。0、0.0、0i和'\u0000'都表示相同的常量值,但型別卻不同。再比如,除法運算中運算元的型別對除法結果得到的型別會產生影響,因此常量除法表示式中,運算元選擇不同的寫法會影響結果。

本文部分內容摘自《go程式語言》

Go 語言常量

常量是乙個簡單值的識別符號,在程式執行時,不會被修改的量。常量中的資料型別只可以是布林型 數字型 整數型 浮點型和複數 和字串型。const identifier type value 顯式型別定義 const b string abc 隱式型別定義 const b abc const name1,...

Go 語言常量

常量是乙個簡單值的識別符號,在程式執行時,不會被修改的量。常量中的資料型別只可以是布林型 數字型 整數型 浮點型和複數 和字串型。常量的定義格式 package main import fmt 常量的資料型別 只可以是布林型 數字型 整數型 浮點型 複數 字串型 func main 多個常量的應用 ...

Go 語言常量

常量是乙個簡單值的識別符號,在程式執行時,不會被修改的量。常量中的資料型別只可以是布林型 數字型 整數型 浮點型和複數 和字串型。常量的定義格式 package main import fmt 常量的資料型別 只可以是布林型 數字型 整數型 浮點型 複數 字串型 func main 多個常量的應用 ...