1.1 名稱
Go中函數,變量,常量,類型,語句標籤和包的名稱遵循一個簡單的命名規則:名稱的開頭是一個字母或下劃線,並且區分大小寫
注:實體的第一個字母的大小寫決定了其可見性是否可以跨包。如果名字是大寫字母的開頭,它是導出的,意味着它對包外可見和可訪問的,可以被包外的其他程序所引用(拷貝),像 fmt 包中的 Printf.包名總是由小寫字母組成。
1.2 聲明
聲明給一個實體命名,並且設定其全部屬性。
有四個主要的聲明:變量(var),常量(const),類型(type)和函數(type)。
1.3 變量
短變量聲明
var flo int = 100
flo := 100
上面這兩個式子等價多個變量可以以短變量聲明的方式聲明和初始化
i, j := 0, 1
i, j := os.Open(name) //os.Open()函數有兩個返回值短變量至少要聲明一個一個新變量,否則,代碼無法編譯通過
f, err := os.Open(infile) //編譯通過
f, err := os.Create(outfile) //編譯錯誤,沒有新變量
指針
指針的值是變量的地址。不是所有的值都有指針,但是所有的變量都有指針。
注:Go語言中的指針,指針本身不可作計算,不能使用 ++,– 等操作
new 函數
一種創建變量的方式就是使用內置的 new 函數。
new(T) 創建一個未知名的 T 類型變量,初始化爲 T 類型的零值,並返回其地址(地址類型爲 *T)
變量的生命週期
生命週期是指在程序執行過程中變量存在的時間段。
編譯器可以選擇使用堆或棧的空間來分配內存,但是這個選擇不是基於使用的 var,new 關鍵字來聲明變量。
var global *int
func f(){
var x int
x = 1
global = &x //這裏,x 一定使用的是 堆 上的空間,因爲他的 f()函數返回後,還可以從 global 變量訪問,儘管他被聲明成一個局部變量
}
1.4 賦值
多重賦值
x, y = y, x
a[i], a[j] = a[j],a[i]
i, j, k = 1, 2, 3
函數有多個返回值也可以
f, err = os.Open(“foo.txt”) //函數調用返回兩個值
_, err = os Open(“foo.txt”) //可以丟棄第一個返回值,接收第二個返回值