首頁  >  文章  >  後端開發  >  go語言中const怎麼用

go語言中const怎麼用

青灯夜游
青灯夜游原創
2023-01-28 10:54:151726瀏覽

在go語言中,const關鍵字可定義常數,用於儲存不會改變的數據,定義單一常數的語法“const 常數名= 常數值”,批量定義多個常數的語法“const (常數名1=常數值1 常數名2=常數值2 ...)」。常數是在編譯時被創建的,即使定義在函數內部也是如此,並且只能是布林型、數字型(整數型、浮點型和複數)和字串型。

go語言中const怎麼用

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

Go 語言中使用const關鍵字定義常數。

常數用於儲存不會改變的數據,常數是在編譯時被創建的,即使定義在函數內部也是如此,並且只能是布林型、數字型(整數型、浮點型和複數)和字串型。由於編譯時的限制,定義常數的表達式必須為能被編譯器求值的常數表達式。

常數的定義格式和變數的宣告語法類似:const name [type] = value,例如:

const pi = 3.14159 // 相当于 math.Pi 的近似值

在Go語言中,你可以省略類型說明符[type],因為編譯器可以根據變數的值來推斷其類型。

  • 明確型別定義: const b string = "abc"

  • 隱含型別定義: const b = "abc"

常數的值必須是能夠在編譯時就能夠確定的,可以在其賦值表達式中涉及計算過程,但是所有用於計算的值必須在編譯期間就能取得。

  • 正確的做法:

const c1 = 2/3
  • 錯誤的做法:

const c2 = getNumber() // 引发构建错误: getNumber() 用做值

和變數宣告一樣,可以批次宣告多個常數:

const (
    e  = 2.7182818
    pi = 3.1415926
)

所有常數的運算都可以在編譯期完成,這不僅可以減少執行時間的工作,也方便其他程式碼的編譯最佳化,當操作數是常數時,一些運行時的錯誤也可以在編譯時被發現,例如整數除零、字串索引越界、任何導致無效浮點數的操作等。

常數間的所有算術運算、邏輯運算和比較運算的結果也是常數,對常數的類型轉換操作或以下函數呼叫都是傳回常數結果:len、cap、real、imag、complex 和unsafe .Sizeof。

因為它們的值是在編譯期就確定的,因此常數可以是構成類型的一部分,例如用於指定數組類型的長度:

const IPv4Len = 4
// parseIPv4 解析一个 IPv4 地址 (d.d.d.d).
func parseIPv4(s string) IP {
    var p [IPv4Len]byte
    // ...
}

一個常數的聲明也可以包含一個類型和一個值,但是如果沒有明確指明類型,那麼將從右邊的表達式推斷類型。在下面的程式碼中,time.Duration 是一個命名類型,底層類型是 int64,time.Minute 是對應型別的常數。下面宣告的兩個常數都是time.Duration 類型,可以透過%T 參數列印類型資訊:

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"

如果是批次宣告的常數,除了第一個外其它的常數右邊的初始化表達式都可以省略,如果省略初始化表達式則表示使用前面常數的初始化表達式,對應的常數型別也是一樣的。例如:

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

【相關推薦:Go影片教學程式設計教學

以上是go語言中const怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn