編程學習網(wǎng) > 編程語言 > go > Go 常量學習-可視化指南
2020
03-27

Go 常量學習-可視化指南


Go 的類型常量和非類型常量是兩個必須要了解的關(guān)鍵概念

不要忘記在文章下面有很多代碼示例,因此你要確保點擊這些鏈接并嘗試運行這些程序。


你為什么使用常量?


你不想在代碼中到處定義魔法數(shù)值,于是使用常量來聲明它們,并在代碼中再次使用它們。

魔法數(shù)值是不安全的,你需要準確聲明它們,因此,常量是一個安全的選擇。除此之外,在代碼中看到常量而不是魔法數(shù)值也是令人高興的;人們可以更好地理解代碼是怎樣的。

我們希望我們可以在使用常量中獲得運行速度上的收益,因為,使用常量能夠使編譯器能夠進行更多的優(yōu)化,它將知道常量的值永遠不會改變。

我最喜歡的是非類型化常量。它真是個天才的想法。當使用非類型化常量時,你將獲得更多的靈活性和高精度的計算。


類型常量

類型 →Boolean,rune,numerics,或者 string

值 → 編譯期時在聲明中分配值

地址 → 你無法得到它在內(nèi)存中的地址(不像變量)

  • 你無法在聲明常量之后再改變它
  • 你不能使用運行時的結(jié)構(gòu),例如變量,指針,數(shù)組,切片,map,結(jié)構(gòu)體,接口,方法調(diào)用,或者方法的值。


類型化常量聲明

圖中定義了一個類型常量 Pi,它的類型為 float64,值為 3.14


聲明多個常量

在一個代碼塊中聲明多個具有不同類型不同值的常量

  • 一個常量的類型和值沒有聲明時,它將從上一個常量中得到它。在上面,pi2 從 pi 中獲取其類型和值。
  • Age 常量在聲明時有一個新的值。并且,它通過賦值為 10 獲取默認的類型 int。
  • 可以在同一行和多個變量聲明中定義多個常量。


非類型化常量

它們有很好的特性,比如高精度的計算以及在所有數(shù)值表達式中使用它們而不聲明類型等。下面我將介紹這些特性。它們就像 Go 中的通配符。

理想類型 → 與 Go 通常類型不同的隱藏類型。

理想值 → 存在于理想值空間中,并且具有默認類型。

默認類型 → 取決于理想值。


非類型化常量的聲明

聲明了一個非類型化的常量 Pi,并且為它賦值為 3.14,那么它默認的類型就是 float。


當需要它的類型的時候,圖片左側(cè)(期望類型)將轉(zhuǎn)化為右邊的類型(預(yù)先聲明的類型)


高精度計算

如果常量只停留在非類型化常量領(lǐng)域,那么它沒有速度的限制!但是,當將常量賦值給變量進行使用時,速度就有限制了。


當你將其分配給變量時,非類型化常量的精度會降低,其默認類型會轉(zhuǎn)換為 Go 的普通類型[6]


靈活的表達方式

你可以使用非類型化常量臨時從 Go 的強類型系統(tǒng)中逸出,直到它們在類型要求表達式中的計算為止。

我在代碼中[8]一直使用它們時,會避免在不需要強類型時聲明它們。所以,如果你不真正需要常量,就不要用它聲明類型。

運行代碼示例

  • Understand when and how to use untyped constants[9]
  • We can assign an untyped constant to any numeric-type variable[10]


常量作用范圍

一個常量只能在它的聲明的作用域內(nèi)使用。如果你在更內(nèi)部的作用域內(nèi)以同樣的名字再聲明一個常量,那么這個常量僅僅在內(nèi)部作用域內(nèi)可以使用,并且在此作用域內(nèi)將覆蓋外部聲明的常量。


掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取