從0開始學GO之變數與常量
阿新 • • 發佈:2021-01-20
文章目錄
更多參見:從0開始學GO之目錄
變數
變數幾乎所有程式語言最基礎的組成元素。從根本上說,變數相當於是對一塊資料儲存空間的命名,程式可以通過定義一個變數來申請一塊資料儲存空間,之後可以通過引用變數名來使用這塊儲存空間。
變數宣告
Go語言引入了關鍵字 var
,而型別資訊放在變數名之後,變數宣告語句不需要使用分號作為結束符。
var v1 string
var v2 [5]int // 陣列
var v3 struct {
s1 int
s2 string
}
var v4 *int // 指標
var v5 map[string]int // map,key為string型別,value為int型別
var v6 func(a int) int
//一次定義多個變數
var v7 , v8 int // 同類型
var (
v5 string
v6 int
)
變數初始化
對於宣告變數時需要進行初始化的場景, var
關鍵字可以保留,但不再是必要的元素
var v1 int = 10
var v2 = 10 // 編譯器自動推匯出v2的型別
v3 := 10 // 編譯器可以自動推匯出v3的型別
// 以上三種用法的效果是完全一樣的
//出現在 := 左側的變數不應該是已經被宣告過
var i int
i := 2 //err
變數賦值
var v1 int
v1 = 123
var v2, v3, v4 int
v2, v3, v4 = 1, 2, 3 //多重賦值
i := 10
j := 20
i, j = j+1, i+1 //多重賦值
多重賦值形式上像Python
匿名變數
_(下劃線)任何賦予它的值都會被丟棄:
package main
import "fmt"
func test() (int, string) {
return 250, "go"
}
func main() {
i := 10
j := 20
_, j = j+1, i+1 //多重賦值
fmt.Println(i)
fmt.Println(j)
var str string
_, str = test()
fmt.Println(str)
}
常量
常量是指編譯期間就已知且不可改變的值。常量可以是數值型別(包括整型、浮點型和複數型別)、布林型別、字串型別等。
字面常量
所謂字面常量(literal),是指程式中硬編碼的常量
-12
3.14159265358979323846 // 浮點型別的常量
3.2+12i // 複數型別的常量
true // 布林型別的常量
"foo" // 字串常量
常量定義
通過const
關鍵字,進行定義。常量定義可以限定常量型別,但不是必需的。如果定義常量時沒有指定型別,那麼它與字面常量一樣,是無型別常量。
const Pi float64 = 3.14
const zero = 0.0 // 無型別浮點常量
const (
size int64 = 1024
eof = -1 // 整型常量, 自動推導型別
)
const a, b, c = 3, 4, "go"
const mask = 1 << 3
預定義常量
Go語言預定義了這些常量:true、false和iota。
常量宣告可以使用iota常量生成器初始化,它用於生成一組以相似規則初始化的常量,但是不用每行都寫一遍初始化表示式。可以被認為是一個可被編譯器修改的常量,在每一個const關鍵字出現時被重置為0,然後在下一個const出現之前,每出現一次iota,其所代表的數字會自動增1。
const ( // iota被重設為0
c0 = iota // c0 == 0
c1 = iota // c1 == 1
c2 = iota // c2 == 2
)
const ( // iota被重設為0
c3 = iota // c3 == 0
c4 // c4 == 1
c5 // c5 == 2
)
const (
a = 1 << iota // a == 1 (iota在每個const開頭被重設為0)
b = 1 << iota // b == 2
c = 1 << iota // c == 4
)
列舉
列舉指一系列相關的常量。Go語言並不支援眾多其他語言明確支援的enum關鍵字。可以通過 const + iota
進行列舉表示
const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
numberOfDays // 這個常量沒有匯出包內私有
)
以大寫字母開頭的常量在包外可見,以上numberOfDays為包內私有,其他符號則可被其他包訪問。
個人能力有限,如有錯誤或者其他建議,敬請告知歡迎探討,謝謝!