淘寶網(wǎng)站是什么語言做的qq群推廣
編程筆記 Golang基礎(chǔ) 018 常量與變量
- 一、常量
- 常量的定義
- iota
- 特性
- 二、變量
- 變量定義
- 變量作用域
- 零值與初始化
- 類型轉(zhuǎn)換
- 注意事項(xiàng)
- 三、重要性
常量,就是在程序編譯階段就確定下來的值,而程序在運(yùn)行時則無法改變該值。變量是程序的基本組成單位,用于存儲和表示可變的數(shù)據(jù)。
一、常量
常量,就是在程序編譯階段就確定下來的值,而程序在運(yùn)行時則無法改變該值。在Go程序中,常量可以是數(shù)值類型(包括整型、浮點(diǎn)型和復(fù)數(shù)類型)、布爾類型、字符串類型等。
常量的定義
常量的定義格式如下:
Go
const identifier [type] = value
identifier 是你為常量指定的名字。
[type] 是可選的,用于顯式指定常量的數(shù)據(jù)類型。如果不提供類型,則編譯器會根據(jù) value 的初始值自動推斷出類型。
value 是常量的值,它可以是布爾型、數(shù)字型(包括整數(shù)、浮點(diǎn)數(shù)和復(fù)數(shù))、字符串或其他常量表達(dá)式的結(jié)果。
實(shí)例
package mainfunc main() {const PI float64 = 3.14const PI2 = 3.1415 // 可以省略類型const (width = 100height = 200)const i, j = 1, 2 // 多重賦值const a, b, c = 1, 2, "foo"
}
const同時聲明多個常量時,如果省略了值則表示和上面一行的值相同
package mainimport "fmt"func main() {const (a1 = 100a2a3)fmt.Printf("a1: %v\n", a1)fmt.Printf("a2: %v\n", a2)fmt.Printf("a3: %v\n", a3)
}
運(yùn)行結(jié)果
a1: 100
a2: 100
a3: 100
iota
iota 比較特殊,可以被認(rèn)為是一個可被編譯器修改的常量,它默認(rèn)開始值是0,每調(diào)用一次加1。遇到 const 關(guān)鍵字時被重置為 0。
實(shí)例
package mainimport "fmt"func main() {const (a1 = iotaa2 = iotaa3 = iota)fmt.Printf("a1: %v\n", a1)fmt.Printf("a2: %v\n", a2)fmt.Printf("a3: %v\n", a3)
}
運(yùn)行結(jié)果
a1: 0
a2: 1
a3: 2
使用_跳過某些值
package mainimport "fmt"func main() {const (a1 = iota_a2 = iota)fmt.Printf("a1: %v\n", a1)fmt.Printf("a2: %v\n", a2)
}
運(yùn)行結(jié)果
a1: 0
a2: 2
iota聲明中間插隊
package mainimport "fmt"func main() {const (a1 = iotaa2 = 100a3 = iota)fmt.Printf("a1: %v\n", a1)fmt.Printf("a2: %v\n", a2)fmt.Printf("a3: %v\n", a3)
}
運(yùn)行結(jié)果
a1: 0
a2: 100
a3: 2
特性
不可變性:一旦定義,常量的值就不能被更改。
類型安全:每個常量都有明確的類型,不能進(jìn)行不兼容類型的隱式轉(zhuǎn)換。
編譯期確定:常量表達(dá)式的值在編譯階段就已經(jīng)計算出來,而非運(yùn)行時。
通過以上介紹,可以看出Go語言中的常量提供了簡潔的方式來定義程序中不變的值,并且通過類型檢查確保了程序的健壯性和可預(yù)測性。
二、變量
在Go語言中,變量是程序的基本組成單位,用于存儲和表示可變的數(shù)據(jù)。以下是Go語言中關(guān)于變量的詳解:
變量定義
-
基本格式:
var identifier type = value
其中
identifier
是變量名,type
是變量的類型(如 int、string、float64 等),value
是初始值。例如:var name string = "Alice" var age int = 25
-
簡寫形式:
如果初始化時明確給出了變量的值,可以省略變量類型的聲明,Go編譯器會根據(jù)賦值表達(dá)式的類型自動推斷變量類型。var name = "Bob" // 編譯器推斷name為string類型 var age = 30 // 編譯器推斷age為int類型
-
同時聲明多個變量:
同一行內(nèi)可以聲明多個同類型變量,用逗號分隔。var a, b, c int = 1, 2, 3
-
短變量聲明:
在函數(shù)內(nèi)部,還可以使用簡化的變量聲明方式,即:=
操作符來同時聲明并初始化變量,無需使用var
關(guān)鍵字。此方式只適用于局部變量。func main() {x, y := 10, 20 // 聲明并初始化x和y }
-
匿名變量(Blank Identifier):
使用下劃線_
作為變量名時,表示該變量被聲明但不使用,主要用于忽略函數(shù)返回的多余值。_, err := someFunctionReturningMultipleValues()
變量作用域
- 在函數(shù)外部聲明的變量具有包級作用域,在整個包文件內(nèi)可見,如果不加訪問修飾符(如
var variableName
),默認(rèn)為包私有(不可從其他包直接訪問)。 - 在函數(shù)內(nèi)部聲明的變量具有局部作用域,僅在該函數(shù)內(nèi)部可見。
零值與初始化
- 如果沒有顯式初始化,變量將被賦予其類型的零值。比如整型為0,字符串為
""
(空字符串),布爾型為false
等。 - Go語言強(qiáng)烈鼓勵顯式初始化變量以提高代碼可讀性和減少未初始化變量的使用錯誤。
類型轉(zhuǎn)換
雖然Go是靜態(tài)類型語言,但在必要時可以通過顯式轉(zhuǎn)換操作將一種類型轉(zhuǎn)換為另一種類型。
注意事項(xiàng)
- 變量名必須遵循標(biāo)識符命名規(guī)則,首字符不能是數(shù)字,可以包含字母(大小寫敏感)、數(shù)字和下劃線。
- Go語言是靜態(tài)類型語言,因此每個變量都具有固定的類型,并且編譯器會在編譯階段檢查類型一致性。
三、重要性
在程序設(shè)計中,常量(Constants)和變量(Variables)扮演著至關(guān)重要的角色,它們都是存儲數(shù)據(jù)的基本元素,但各自的特性和使用場景各有不同:
-
常量的重要性:
- 不變性與可靠性:常量的值一旦定義就不能改變,這為程序提供了確定性和穩(wěn)定性。例如,在計算圓周率、物理常數(shù)或配置固定的錯誤代碼時,使用常量可以確保這些數(shù)值在整個程序運(yùn)行期間始終保持不變。
- 提高可讀性:通過命名良好的常量,可以增強(qiáng)代碼的自解釋性。比如,用
PI
替代具體的浮點(diǎn)數(shù),使其他開發(fā)者更容易理解代碼意圖,減少閱讀難度。 - 防止意外修改:由于常量不可變,因此避免了因意外操作導(dǎo)致重要數(shù)據(jù)被修改的風(fēng)險。
- 編譯時優(yōu)化:編譯器可以在編譯階段就對常量進(jìn)行求值,并可能將常量直接內(nèi)嵌到指令中,從而提高程序執(zhí)行效率。
-
變量的重要性:
- 動態(tài)數(shù)據(jù)處理:變量是程序中必不可少的數(shù)據(jù)容器,其值可以根據(jù)程序邏輯隨時更改,用于存儲用戶輸入、計算結(jié)果、狀態(tài)標(biāo)志等臨時或變化的數(shù)據(jù)。
- 靈活性:變量的存在使得程序能夠響應(yīng)不同的輸入和條件,執(zhí)行不同的操作,從而使程序具有適應(yīng)性。
- 內(nèi)存管理:變量占用內(nèi)存空間并允許程序分配和釋放資源,這對于實(shí)現(xiàn)復(fù)雜算法和數(shù)據(jù)結(jié)構(gòu)至關(guān)重要。
- 控制流:循環(huán)變量、條件語句中的測試變量等都在程序流程控制中起到關(guān)鍵作用。
綜上所述,常量和變量在程序設(shè)計中共同構(gòu)建了一個靈活且可靠的數(shù)據(jù)模型,保證了程序既能夠在必要時持有靜態(tài)不變的數(shù)據(jù),又能夠根據(jù)需要處理動態(tài)變化的信息。同時,恰當(dāng)?shù)氖褂脙烧哌€能促進(jìn)代碼的清晰度、健壯性和性能優(yōu)化。