在本節(jié)之后,我們將正式學(xué)習(xí) golang 語言基礎(chǔ)蒙谓。本節(jié),我們將介紹 “golang 數(shù)據(jù)類型”训桶,如果你還沒閱讀過之前的文章內(nèi)容累驮,可以打開以下鏈接進行閱讀
一、數(shù)據(jù)類型的分類
數(shù)據(jù)類型的出現(xiàn)是為了把數(shù)據(jù)分成所需內(nèi)存大小不同的數(shù)據(jù)舵揭,編程的時候需要用大數(shù)據(jù)的時候才需要申請大內(nèi)存谤专,就可以充分利用內(nèi)存。
1. 數(shù)據(jù)類別
golang 數(shù)據(jù)類型 按數(shù)據(jù)類別有以下幾種數(shù)據(jù)類型:
- 布爾型: 布爾型的值只可以是常量 true 或者 false午绳。一個簡單的例子:var b bool = true置侍。
- 數(shù)字類型: 整型 int 和浮點型 float32、float64拦焚,Go 語言支持整型和浮點型數(shù)字蜡坊,并且支持復(fù)數(shù),其中位的運算采用補碼赎败。
- 字符串類型: 字符串就是一串固定長度的字符連接起來的字符序列秕衙。Go 的字符串是由單個字節(jié)連接起來的。Go 語言的字符串的字節(jié)使用 UTF-8 編碼標(biāo)識 Unicode 文本僵刮。
- 派生類型: 包括:(a) 指針類型(Pointer)(b) 數(shù)組類型(c) 結(jié)構(gòu)化類型(struct)(d) Channel 類型(e) 函數(shù)類型(f) 切片類型(g) 接口類型(interface)(h) Map 類型灾梦。
2.存儲方式
golang 數(shù)據(jù)類型按存儲方式 有兩大類數(shù)據(jù)類型:
- 值類型,也叫基本數(shù)據(jù)類型:數(shù)值類型妓笙、bool若河、string、數(shù)組寞宫、struct 結(jié)構(gòu)體
- 引用數(shù)據(jù)類型:指針萧福、slice 切片、管道 chan辈赋、map鲫忍、以及 interface
值類型:變量直接存儲值。值類型的數(shù)據(jù)存儲在棧內(nèi)存空間中钥屈,棧在函數(shù)調(diào)用完內(nèi)存會被釋放悟民。
引用類型:變量存儲的是一個地址,這個地址存儲最終的值篷就。引用數(shù)據(jù)類型的數(shù)據(jù)存儲在堆內(nèi)存空間中射亏,通過 GC 回收。
二、常用數(shù)據(jù)類型
1. bool 類型
golang 中以bool
關(guān)鍵字聲明布爾類型數(shù)據(jù)智润,布爾型的值只可以是true
或者 false
及舍。代表條件成立(真)或條件不成立(假),以下一個簡單的例子:
var b bool = true
布爾類型變量的默認值為 false
golang 中不允許將整型強制轉(zhuǎn)換為布爾型
布爾型無法參與數(shù)值運算窟绷,也無法與其他類型進行轉(zhuǎn)換
2. 數(shù)字類型
(1)整型
整型主要有 int 锯玛、int16、int32兼蜈、int64攘残、uint、uint8为狸、uint16肯腕、uint32、uint64钥平。如下表格
- uint8: 無符號 8 位整型 (0 到 255)
- uint16: 無符號 16 位整型 (0 到 65535)
- uint32: 無符號 32 位整型 (0 到 4294967295)
- uint64: 無符號 64 位整型 (0 到 18446744073709551615)
- int8: 有符號 8 位整型 (-128 到 127)
- int16: 有符號 16 位整型 (-32768 到 32767)
- int32: 有符號 32 位整型 (-2147483648 到 2147483647)
- int64: 有符號 64 位整型 (-9223372036854775808 到 9223372036854775807)
Go 語言的 int/uint 類型实撒,是不可移植的類型,其長度根據(jù)宿主機的機器字長決定涉瘾。int
, uint
和 uintptr
在 32 位系統(tǒng)上通常為 32 位寬知态,在 64 位系統(tǒng)上則為 64 位寬。
(2)浮點型
浮點數(shù)類型主要有 float32立叛、float64负敏、complex64、complex128
- float32: IEEE-754 32 位浮點型數(shù)
- float64: IEEE-754 64 位浮點型數(shù)
- complex64: 32 位實數(shù)和虛數(shù)
- complex128: 64 位實數(shù)和虛數(shù)
(3)其他數(shù)字類型
以下列出了其他更多的數(shù)字類型:
- byte :類似 uint8秘蛇,代表了 ASCII 碼的一個字符其做,也可以說是 ASCII 字符類型
- rune : 類似 int32,表示一個 Unicode 碼點
- uintptr: 無符號整型赁还,用于存放一個指針
UTF-8 是 Unicode 的實現(xiàn)方式之一妖泄。UTF-8 最大的一個特點,就是它是一種變長的編碼方式艘策。它可以使用 1~4 個字節(jié)表示一個符號蹈胡,根據(jù)不同的符號而變化字節(jié)長度。
(4)類型強轉(zhuǎn)
golang 中只有強制類型轉(zhuǎn)換朋蔫,沒有隱式類型轉(zhuǎn)換罚渐。該語法只能在兩個類型之間支持相互轉(zhuǎn)換的時候使用。
強制類型轉(zhuǎn)換的基本語法為:type(variable)
驯妄,可轉(zhuǎn)換的數(shù)據(jù)包括變量荷并、表達式、函數(shù)返回值等青扔。如下代碼
var a int = 8
// 將int類型改為int32類型
var b int32 = int32(a)
3. 字符串類型
字符串定義:var str string
字符串有兩種表示方式:雙引號("")源织;反引號翩伪,也叫原意符號(``),如下代碼
package main
import "fmt"
func main() {
var str1 = "hello world"
var str2 = `
窗前明月光
疑是地上霜
舉頭望明月
低頭思故鄉(xiāng)
`
fmt.Println("str1 = ", str1)
fmt.Println("str2 = ", str2)
}
運行結(jié)果如下
pan@pandeMBP src % go run learn/test4
str1 = hello world
str2 =
窗前明月光
疑是地上霜
舉頭望明月
低頭思故鄉(xiāng)
pan@pandeMBP src %
三雀鹃、總結(jié)
本節(jié),我們介紹了 golang 數(shù)據(jù)類型的分類励两,以及介紹了常用的幾種數(shù)據(jù)類型黎茎。在后面的章節(jié)中,我們將更深入地學(xué)習(xí)和使用各種數(shù)據(jù)類型当悔。