首頁 後端開發 Golang go語言中const怎麼用

go語言中const怎麼用

Jan 28, 2023 am 10:54 AM
golang go語言

在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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Go語言中用於浮點數運算的庫有哪些? Go語言中用於浮點數運算的庫有哪些? Apr 02, 2025 pm 02:06 PM

Go語言中用於浮點數運算的庫介紹在Go語言(也稱為Golang)中,進行浮點數的加減乘除運算時,如何確保精度是�...

Go的爬蟲Colly中Queue線程的問題是什麼? Go的爬蟲Colly中Queue線程的問題是什麼? Apr 02, 2025 pm 02:09 PM

Go爬蟲Colly中的Queue線程問題探討在使用Go語言的Colly爬蟲庫時,開發者常常會遇到關於線程和請求隊列的問題。 �...

GoLand中自定義結構體標籤不顯示怎麼辦? GoLand中自定義結構體標籤不顯示怎麼辦? Apr 02, 2025 pm 05:09 PM

GoLand中自定義結構體標籤不顯示怎麼辦?在使用GoLand進行Go語言開發時,很多開發者會遇到自定義結構體標籤在�...

在 Go 語言中,為什麼使用 Println 和 string() 函數打印字符串會出現不同的效果? 在 Go 語言中,為什麼使用 Println 和 string() 函數打印字符串會出現不同的效果? Apr 02, 2025 pm 02:03 PM

Go語言中字符串打印的區別:使用Println與string()函數的效果差異在Go...

在Go語言中使用Redis Stream實現消息隊列時,如何解決user_id類型轉換問題? 在Go語言中使用Redis Stream實現消息隊列時,如何解決user_id類型轉換問題? Apr 02, 2025 pm 04:54 PM

Go語言中使用RedisStream實現消息隊列時類型轉換問題在使用Go語言與Redis...

Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Apr 02, 2025 pm 04:12 PM

Go語言中哪些庫是大公司開發或知名開源項目?在使用Go語言進行編程時,開發者常常會遇到一些常見的需求,�...

在Go編程中,如何正確管理Mysql和Redis的連接與釋放資源? 在Go編程中,如何正確管理Mysql和Redis的連接與釋放資源? Apr 02, 2025 pm 05:03 PM

Go編程中的資源管理:Mysql和Redis的連接與釋放在學習Go編程過程中,如何正確管理資源,特別是與數據庫和緩存�...

Golang的目的:建立高效且可擴展的系統 Golang的目的:建立高效且可擴展的系統 Apr 09, 2025 pm 05:17 PM

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

See all articles