日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)GO教程:Go語(yǔ)言常量和const關(guān)鍵字

Go語(yǔ)言中的常量使用關(guān)鍵字 const 定義,用于存儲(chǔ)不會(huì)改變的數(shù)據(jù),常量是在編譯時(shí)被創(chuàng)建的,即使定義在函數(shù)內(nèi)部也是如此,并且只能是布爾型、數(shù)字型(整數(shù)型、浮點(diǎn)型和復(fù)數(shù))和字符串型。由于編譯時(shí)的限制,定義常量的表達(dá)式必須為能被編譯器求值的常量表達(dá)式。

成都創(chuàng)新互聯(lián)主營(yíng)江城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,APP應(yīng)用開(kāi)發(fā),江城h5微信平臺(tái)小程序開(kāi)發(fā)搭建,江城網(wǎng)站營(yíng)銷(xiāo)推廣歡迎江城等地區(qū)企業(yè)咨詢

常量的定義格式和變量的聲明語(yǔ)法類似:
const name [type] = value,例如:

const pi = 3.14159 // 相當(dāng)于 math.Pi 的近似值

在Go語(yǔ)言中,你可以省略類型說(shuō)明符 [type],因?yàn)榫幾g器可以根據(jù)變量的值來(lái)推斷其類型。

  • 顯式類型定義: const b string = "abc"
  • 隱式類型定義: const b = "abc"

常量的值必須是能夠在編譯時(shí)就能夠確定的,可以在其賦值表達(dá)式中涉及計(jì)算過(guò)程,但是所有用于計(jì)算的值必須在編譯期間就能獲得。

  • 正確的做法:const c1 = 2/3
  • 錯(cuò)誤的做法:const c2 = getNumber() // 引發(fā)構(gòu)建錯(cuò)誤: getNumber() 用做值

和變量聲明一樣,可以批量聲明多個(gè)常量:

const (
    e  = 2.7182818
    pi = 3.1415926
)

所有常量的運(yùn)算都可以在編譯期完成,這樣不僅可以減少運(yùn)行時(shí)的工作,也方便其他代碼的編譯優(yōu)化,當(dāng)操作數(shù)是常量時(shí),一些運(yùn)行時(shí)的錯(cuò)誤也可以在編譯時(shí)被發(fā)現(xiàn),例如整數(shù)除零、字符串索引越界、任何導(dǎo)致無(wú)效浮點(diǎn)數(shù)的操作等。

常量間的所有算術(shù)運(yùn)算、邏輯運(yùn)算和比較運(yùn)算的結(jié)果也是常量,對(duì)常量的類型轉(zhuǎn)換操作或以下函數(shù)調(diào)用都是返回常量結(jié)果:len、cap、real、imag、complex 和 unsafe.Sizeof。

因?yàn)樗鼈兊闹凳窃诰幾g期就確定的,因此常量可以是構(gòu)成類型的一部分,例如用于指定數(shù)組類型的長(zhǎng)度:

const IPv4Len = 4

// parseIPv4 解析一個(gè) IPv4 地址 (d.d.d.d).
func parseIPv4(s string) IP {
    var p [IPv4Len]byte
    // ...
}

一個(gè)常量的聲明也可以包含一個(gè)類型和一個(gè)值,但是如果沒(méi)有顯式指明類型,那么將從右邊的表達(dá)式推斷類型。在下面的代碼中,time.Duration 是一個(gè)命名類型,底層類型是 int64,time.Minute 是對(duì)應(yīng)類型的常量。下面聲明的兩個(gè)常量都是 time.Duration 類型,可以通過(guò) %T 參數(shù)打印類型信息:

const noDelay time.Duration = 0
const timeout = 5 * time.Minute
fmt.Printf("%T %[1]v\n", noDelay)     // "time.Duration 0"
fmt.Printf("%T %[1]v\n", timeout)     // "time.Duration 5m0s"
fmt.Printf("%T %[1]v\n", time.Minute) // "time.Duration 1m0s"

如果是批量聲明的常量,除了第一個(gè)外其它的常量右邊的初始化表達(dá)式都可以省略,如果省略初始化表達(dá)式則表示使用前面常量的初始化表達(dá)式,對(duì)應(yīng)的常量類型也是一樣的。例如:

const (
    a = 1
    b
    c = 2
    d
)

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

如果只是簡(jiǎn)單地復(fù)制右邊的常量表達(dá)式,其實(shí)并沒(méi)有太實(shí)用的價(jià)值。但是它可以帶來(lái)其它的特性,那就是 iota 常量生成器語(yǔ)法。

iota 常量生成器

常量聲明可以使用 iota 常量生成器初始化,它用于生成一組以相似規(guī)則初始化的常量,但是不用每行都寫(xiě)一遍初始化表達(dá)式。在一個(gè) const 聲明語(yǔ)句中,在第一個(gè)聲明的常量所在的行,iota 將會(huì)被置為 0,然后在每一個(gè)有常量聲明的行加一。

【示例 1】首先定義一個(gè) Weekday 命名類型,然后為一周的每天定義了一個(gè)常量,從周日 0 開(kāi)始。在其它編程語(yǔ)言中,這種類型一般被稱為枚舉類型。

type Weekday int

const (
    Sunday Weekday = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
)

周日將對(duì)應(yīng) 0,周一為 1,以此類推。

無(wú)類型常量

Go語(yǔ)言的常量有個(gè)不同尋常之處。雖然一個(gè)常量可以有任意一個(gè)確定的基礎(chǔ)類型,例如 int 或 float64,或者是類似 time.Duration 這樣的基礎(chǔ)類型,但是許多常量并沒(méi)有一個(gè)明確的基礎(chǔ)類型。

編譯器為這些沒(méi)有明確的基礎(chǔ)類型的數(shù)字常量提供比基礎(chǔ)類型更高精度的算術(shù)運(yùn)算,可以認(rèn)為至少有 256bit 的運(yùn)算精度。這里有六種未明確類型的常量類型,分別是無(wú)類型的布爾型、無(wú)類型的整數(shù)、無(wú)類型的字符、無(wú)類型的浮點(diǎn)數(shù)、無(wú)類型的復(fù)數(shù)、無(wú)類型的字符串。

通過(guò)延遲明確常量的具體類型,不僅可以提供更高的運(yùn)算精度,而且可以直接用于更多的表達(dá)式而不需要顯式的類型轉(zhuǎn)換。

【示例 2】math.Pi 無(wú)類型的浮點(diǎn)數(shù)常量,可以直接用于任意需要浮點(diǎn)數(shù)或復(fù)數(shù)的地方:

var x float32 = math.Pi
var y float64 = math.Pi
var z complex128 = math.Pi

如果 math.Pi 被確定為特定類型,比如 float64,那么結(jié)果精度可能會(huì)不一樣,同時(shí)對(duì)于需要 float32 或 complex128 類型值的地方則需要一個(gè)明確的強(qiáng)制類型轉(zhuǎn)換:

const Pi64 float64 = math.Pi

var x float32 = float32(Pi64)
var y float64 = Pi64
var z complex128 = complex128(Pi64)

對(duì)于常量面值,不同的寫(xiě)法可能會(huì)對(duì)應(yīng)不同的類型。例如 0、0.0、0i 和 \u0000 雖然有著相同的常量值,但是它們分別對(duì)應(yīng)無(wú)類型的整數(shù)、無(wú)類型的浮點(diǎn)數(shù)、無(wú)類型的復(fù)數(shù)和無(wú)類型的字符等不同的常量類型。同樣,true 和 false 也是無(wú)類型的布爾類型,字符串面值常量是無(wú)類型的字符串類型。


標(biāo)題名稱:創(chuàng)新互聯(lián)GO教程:Go語(yǔ)言常量和const關(guān)鍵字
URL鏈接:http://www.5511xx.com/article/dhcgihj.html