在Go語言中豆挽,數(shù)據(jù)類型用于聲明函數(shù)和變量。
數(shù)據(jù)類型的出現(xiàn)是為了把數(shù)據(jù)分成所需內(nèi)存大小不同的數(shù)據(jù)券盅,編程的時候需要用大數(shù)據(jù)的時候才需要申請大內(nèi)存帮哈,就可以充分利用內(nèi)存。
數(shù)據(jù)類型
Go語言按類別有以下幾種數(shù)據(jù)類型:
1. bool锰镀,一個字節(jié)娘侍,值是true或者false咖刃,不可以用0或者1表示(java中boolean占用4個字節(jié),而boolean作為數(shù)組出現(xiàn)時私蕾,每個boolean占用1個字節(jié))僵缺,默認(rèn)為false
2. int/uint(帶符號為與不帶符號位的int類型):根據(jù)平臺不同是32位或者64位
3. intx/uintx,int類型踩叭,x代表任意位數(shù),例如:int3翠胰,代表占3bit的int類型
- int????int8????int16????int32????int64
- uint????uint8????uint16????uint32????uint64????uintptr
4. byte容贝,占用8位,一個字節(jié)之景,相當(dāng)于uint8斤富,不帶符號位
5. floatx,由于沒有double類型锻狗,所以float64就是double满力。float32小數(shù)精確到7位,float64小數(shù)精確到15位轻纪。
6. complex64/complex128:復(fù)數(shù)類型
7. uintptr:保存指針用的類型油额,也是隨著平臺改變而改變,因?yàn)橹羔樀拈L度就是隨平臺而變刻帚。
8.其他類型值:array潦嘶,struct,string
9.引用類型:slice崇众,map掂僵,channel
10.接口類型:interface
11.函數(shù)類型:func
12. rune,等價于int32類型
自定義類型
type flag byte
類型轉(zhuǎn)換
Golang是靜態(tài)類型的編程語言顷歌,所有數(shù)據(jù)的類型在編譯期確定了锰蓬。而且 Golang中即使是底層存的是一個類型,聲明的類型不一樣眯漩,也要強(qiáng)制轉(zhuǎn)換才能互用芹扭。
在Go 語言里面沒有隱式轉(zhuǎn)換,遇到不同類型想互用坤塞,只能進(jìn)行強(qiáng)制類型轉(zhuǎn)換7朊恪!摹芙!
Go語言類型轉(zhuǎn)換基本格式如下:
type_name(expression)
其中type_name是數(shù)據(jù)類型灼狰,expression是原始數(shù)據(jù)或表達(dá)式。
示例:將整型轉(zhuǎn)化為浮點(diǎn)型浮禾,并計算結(jié)果交胚,將結(jié)果賦值給浮點(diǎn)型變量:
package main
import "fmt"
func main() {
??? var sum int = 17? ? ?
??? var count int = 5? ?
??? var mean float32? ? ? ?
??? mean = float32(sum)/float32(count)? // 強(qiáng)制轉(zhuǎn)換
??? fmt.Printf("mean 的值為: %f\n",mean)
}
零值
關(guān)于“零值”份汗,所指并非是空值,而是一種“變量未填充前”的默認(rèn)值蝴簇,通常為0杯活。
int ? ?0
int8 ? ?0
int32 ? ?0
int64 ? ?0
uint ? ?0x0
rune ? ?0 ? ?// rune的實(shí)際類型是 int32
byte ? ?0x0 ? ?// byte的實(shí)際類型是 uint8
float32 ? ?0 ? ?// 長度為 4 byte
float64 ? ?0 ? ?// 長度為 8 byte
bool ? ?false
string ? ?""