1.基本類型
類型 | 長(zhǎng)度 | 默認(rèn)值 | 說(shuō)明 |
---|---|---|---|
bool | 1 | false | 不能使用0、1代替false、true |
byte | 1 | 0 | 等同于uint8 |
int、uint | 4、8 | 0 | 默認(rèn)整數(shù)類型,根據(jù)平臺(tái),32或64位 |
int8、uint8 | 1 | 0 | -128 ~ 127,0 ~ 255 |
int16、uint16 | 2 | 0 | -32768 ~ 32767,0 ~ 65535 |
int32、uint32 | 4 | 0 | -(2^32 / 2) ~ (2^32 / 2 - 1),0 ~ 2^32 |
int64、uint64 | 8 | 0 | -(2^64 / 2) ~ (2^64 / 2 - 1),0 ~ 2^64 |
float32 | 4 | 0.0 | |
float64 | 8 | 0.0 | 默認(rèn)浮點(diǎn)數(shù)類型 |
complex64 | 8 | ||
complex128 | 16 | ||
rune | 4 | 0 | Unicode Code Point, int32 |
uintptr | 4,8 | 0 | 足以存儲(chǔ)指針的uint |
string | "" | 字符串,默認(rèn)值為空字符串,而非NULL | |
array | 數(shù)組 | ||
struct | 結(jié)構(gòu)體 | ||
function | nil | 函數(shù) | |
interface | nil | 接口 | |
map | nil | 字典,引用類型 | |
slice | nil | 切片,引用類型 | |
channel | nil | 通道,引用類型 |
2.類型別名
設(shè)置類型別名后可以讓代碼可讀性更強(qiáng),一目了然這個(gè)變量做什么用的:
type (
ByteSize int64
)
3.變量的聲明與賦值
- 變量的聲明: var a int
- 變量的賦值:a = 123
- 聲明并賦值: var a int = 123 (此時(shí)若省略類型,則編譯器根據(jù)值自動(dòng)推導(dǎo)類型)
- 多個(gè)變量的聲明
并行方式(可以省略類型,由值推導(dǎo))
var a, b, c, int = 1, 2, 3
函數(shù)內(nèi)部聲明變量的簡(jiǎn)寫(xiě)形式:
funciont main(){
a:= 1
}
函數(shù)多個(gè)返回值時(shí)可以用"_"忽略返回值
a, _, c, d := 1, 3, 4
4.類型轉(zhuǎn)換
- go中不存在隱式轉(zhuǎn)換,所有類型轉(zhuǎn)換必須顯示聲明
- 轉(zhuǎn)換只能發(fā)生在兩種相互兼容的類型之間
- 類型轉(zhuǎn)換的格式:
var a float32 = 1.1
b := int(a)
- 語(yǔ)法歧義
如果轉(zhuǎn)換的目標(biāo)是指針、單向通道或沒(méi)有返回值的函數(shù)類型,那么必須使用括號(hào),以避免造成語(yǔ)法分解錯(cuò)誤。
fun main() {
x := 100
p := *int(&x) //錯(cuò)誤:cannot convert &x (type *int) to type int
// invalid indirect of int(&x) (type int)
fmt.Println(p)
}
正確的做法是用括號(hào),讓編譯器將*int解析未指針類型。
(*int)(p)
(<-chan int)(c)
(func())(x)