認真一點學 Go:4. 變數及資料型別

printlove發表於2021-09-13

變數

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 協議》,轉載必須註明作者和本文連結

相關文章