首頁 > 軟體

Golang語言的多種變數宣告方式與使用場景詳解

2022-02-14 13:00:49

01介紹

在程式設計中,編譯器必須將代表資料的變數名稱替換成該資料所在的記憶體地址。變數的名稱、型別及記憶體地址通常會維持固定,但該記憶體地址所儲存的資料在程式執行期間則可能會改變。

Golang 語言編譯器需要先明確變數的記憶體邊界,才可以使用變數。通過宣告變數使用的型別,編譯器可以明確變數的記憶體邊界。

因為 Golang 語言是靜態語言,它不能像動態語言那樣,在執行時可以通過分析變數的值,自動確定變數的記憶體邊界,所以在 Golang 語言中,使用變數之前,需要先宣告變數。

在 Golang 語言中,在變數顯式賦值的前提下,宣告變數可以省略型別,和使用短變數宣告方法時,也不需要指定變數型別,此時,編譯器會根據變數的值通過型別推斷得出變數型別,從而明確變數的記憶體邊界。

02變數宣告方式

Golang 語言的變數宣告比較靈活,它支援多種變數宣告的方式,包括標準宣告變數,不顯式賦初始值宣告變數,省略型別宣告變數和短變數宣告。

標準宣告變數

var a int = 100

閱讀上面這段程式碼,我們可以發現 Golang 語言的標準宣告變數方式包含 4 部分,分別是 var 關鍵字,變數名 a,變數型別 int 和變數的值 100。

不顯式賦初始值宣告變數

如果我們不想給宣告的變數賦初始值,也可以不顯式給變數賦值,省略等號和值,如下所示:

var a int

如果不顯式給變數賦值,變數的值是型別的零值,即型別的預設值。

省略型別宣告變數

標準宣告變數方式的 4 部分,除了可以不顯式給變數賦值,還可以省略型別,如下所示:

var a = 100

我們在文章開頭介紹編譯器需要根據變數的型別確定變數的記憶體邊界,如果在宣告變數時,未指定變數的型別,編譯器還可以確定變數的記憶體邊界嗎?

答案是可以。原因是 Golang 編譯器可以根據變數的賦值通過型別推斷得到變數的型別。

細心的讀者可能會問,Golang 語言可以將標準變數宣告方式的 4 部分中型別和顯式賦初始值同時省略嗎?

答案是不可以。Golang 編譯器必須至少明確變數的型別或初始值,二者如果都省略,編譯器將無法得到變數的型別,從而也就不能根據型別明確變數的記憶體邊界。

短變數宣告

以上兩種在標準宣告變數方式的基礎上簡化的變數宣告方式,都需要使用關鍵字 var,可能會有讀者問可以省略關鍵字 var 嗎?

答案是可以。Golang 語言還有一種最簡化的宣告變數的方式,短變數宣告,使用短變數宣告的方式,可以同時省略關鍵字 var 和變數的型別。

a := 100

閱讀上面這段程式碼,它就是短變數宣告,與標準變數宣告的方式相比,該方式省略了關鍵字 var 和變數的型別。但是,細心的讀者可能已經發現,= 改為 :=。Golang 編譯器可以根據變數的賦值做型別推斷,得到變數的型別,從而明確變數的記憶體邊界。

短變數宣告的方式雖然是 Golang 語言中最簡化的變數宣告的方式,但是它也有侷限性,它只能用於區域性變數宣告。

顯式型別轉換

無論是省略型別顯式賦初始值宣告變數,還是短變數宣告,它們都是 Golang 編譯器根據變數的賦值,通過型別推斷得出變數的預設型別。

如果我們也不想使用變數的預設型別,那麼我們可以通過顯式型別轉換得到我們想要的變數型別,如下所示:

var a = int8(100)
b := int8(60)

變數列表宣告

所有宣告變數的方式,都支援變數列表宣告。所謂變數列表宣告,就是使用 var 關鍵字,通過一行程式碼宣告多個變數。

var a, b, c int = 100, 200, 300
var d, e, f int
var g, h, i = 400, "你好", true
j, k, l := 500, "世界", 3.14

變數宣告塊

Golang 語言還支援變數宣告塊,使用關鍵字 var 將多個單個變數宣告或變數列表宣告放在一起,如下所示:

var (
    a int = 100
    b int = 200
)

var (
    c = 300
    d = 3.14
    f = true
)

var (
    e, f, g int = 10, 20, 30
    h, i, j string = "a", "b", "c"
)

03使用場景

我們介紹了多種變數宣告的方式,那麼每種 Golang 語言變數宣告方式的使用場景分別是什麼,首先,我們需要先了解 Golang 語言中變數的作用域,分別是包級變數,全域性變數和區域性變數。

包級變數

包級變數的作用域是隻能在同一個 package 中使用。

包級變數,只能使用 var 關鍵字的變數宣告方式,如果變數宣告顯式初始化,一般會使用省略型別宣告變數的方式。

全域性變數

全域性變數的作用域是在專案的任意位置都可以使用。

如果包級變數的變數名首字母大寫,也就是 Golang 語言中的匯出變數,那麼這個變數就成為全域性變數,可以在全域性使用。

全域性變數,也只能使用 var 關鍵字的變數宣告方式,如果變數宣告顯式初始化,一般會使用省略型別宣告變數的方式。

區域性變數

區域性變數的作用域是隻能在函數體或方法體中使用。

區域性變數,一般會優先使用短變數宣告的方式,除非不想給區域性變數顯式初始化,我們可以使用省略型別宣告變數的方式。

04注意事項:

函數外的每個語句都必須以關鍵字開始(var、const、func等);

:= 不能使用在函數外;

_ 多用於佔位,表示忽略值;

05總結

本文我們介紹 Golang 語言為什麼在使用變數之前,需要先宣告變數;Golang 語言有哪些變數宣告的方式和 Golang 語言的每種變數宣告方式適用於什麼場景。

到此這篇關於Golang語言的多種變數宣告方式與使用場景的文章就介紹到這了,更多相關Golang多種變數宣告與使用場景內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com