變數
1. 宣告
變數的宣告使用 var 關鍵字,格式:var 名稱 型別。特別強調下,Go 語法每行末尾是沒有分號的。
var a int
如果存在多個變數型別相同時,可以逗號分割排列。
var a, b int
宣告一組不同型別的變數,使用小括號包裹住。
var (
a int
b bool
str string
)
當一個變數被宣告後,系統會自動賦予零值,int 為0、bool 為false、string 為空字串、float 為0.0,指標為 nil。
2. 初始化
變數被宣告後,就可以賦值了。
var a int
a = 1
但其實在宣告變數的時候就可以直接賦值。
var a int = 1
var b bool = true
var str string = "我最棒"
還可以再簡單,因為 Go編譯器的智商很高了,在編譯期間就可以推斷變數的型別,那麼就可以省略型別。
// int
var a = 1
// bool
var b = true
// string
var str = "我最棒"
在實際開發中,預設推斷的型別不是我們想要的時候,就可以顯示宣告型別。
終極簡寫方式,使用 := 賦值,省略了 var 關鍵字,這也是實際中最常用的,如下:
// 單變數
a := 1
// 多變數
a, b, str := 1, true, "我最棒"
這種簡寫方式,只適用於函式體內,對於函式體外就只能用 var 關鍵字方式。
資料型別
1. 分類
基本資料型別:整型、浮點型、字串、字元型、布林型、複數。
容器資料型別:陣列、切片(slice)、通道(chan)、對映(map)。
其它資料型別:函式、結構體、介面。
本篇文章,只講解基本資料型別,對於剩餘的型別會在後續文章進行講解。
2. 整型
無符號:uint、uint8,uint16,uint32,uint64
有符號:int、int8,int16,int32,int64
其中 int 和 uint 型別長度由作業系統型別決定,如果系統是32位的,那麼它們都是32位(4位元組);如果是64位的,那麼它們都是64位(8位元組)。
還記得上面所說的,型別推斷嗎?對於整型資料 Go 編譯器預設推斷為 int 型別。如果想宣告且初始化為其它型別,如下:
var a int32 = 1
3. 浮點型
對於浮點型別,只有 float32 和 float64,沒有 float 型別,使用IEEE-754 標準。
float32 精確到小數點後 7 位,float64 精確到小數點後 15 位。由於精度的問題,在進行資料比對的時候,就要考慮精度損失。如下(使用到了函式看不懂的話,後續會講解):
// 比對兩個數是否相等
func IsEqualFloat64(num1 float64, num2 float64) bool {
return math.Abs(num1-num2) < 0.0000001
}
4. 字串
字串型別使用 string 宣告,在初始化時分為單行和多行。單行使用雙引號, 如下:
str := "我最棒"
多行使用反引號,中間如果出現轉義字元時,不會進行解析,原樣輸出,如下:
// 檔名: string.go
package main
import "fmt"
func main() {
str := `
你好,\n
Hello
`
fmt.Println(str)
}
執行結果如下:
go run string.go
## 輸出
你好,\n
Hello
5. 字元型
byte 和 rune 是字元型,但其實不是新增的型別,byte 是 uint8 的別名,佔用1個位元組,rune 是 int32 的別名,佔用4個位元組。
// 對應ASCII碼錶中的97
var a byte = 'a'
或
var a uint8 = 'a'
var b rune = '嗨'
或
var b int32 = '嗨'
byte 代表了 ASCII碼的一個字元,rune 代表了 UTF-8 的一個字元。
6. 布林型
布林型使用 bool 宣告,要麼是 true, 要麼是 false, 預設是false。
a := true
7. 複數
複數型別使用 complex64 和 complex128 宣告,complex64 是 32 位實數和虛數,complex128 是 64 位實數和虛數。
var c1 complex64 = 5 + 10i
或
c1 := 5 + 10i
在上面程式碼中,5 為實數部分,10 為虛數部分,至於在實際中怎麼用,就看你專案中有牽扯到相關數學運算的沒,對於這方面我也幾乎忘乾淨了。如果真的需要進一步學習,我們可以一起學習討論。
總結
本篇對 Go 語言中變數的宣告、變數的初始化、基本資料型別有了一個整體的認識,但可能還會存在一些困惑問題,比如:
如何保留小數位和四捨五入
型別之間的轉化問題
值型別和引用型別
等等
這些問題都會在後續的文章一點點解開,如果著急的想知道,可以在下方留言!
本作品採用《CC 協議》,轉載必須註明作者和本文連結