這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
1.基本類型
類型 |
長度 |
預設值 |
說明 |
bool |
1 |
false |
不能使用0、1代替false、true |
byte |
1 |
0 |
等同於uint8 |
int、uint |
4、8 |
0 |
預設整數類型,根據平台,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 |
預設浮點數類型 |
complex64 |
8 |
|
|
complex128 |
16 |
|
|
rune |
4 |
0 |
Unicode Code Point, int32 |
uintptr |
4,8 |
0 |
足以儲存指標的uint |
string |
|
"" |
字串,預設值為空白字串,而非NULL |
array |
|
|
數組 |
struct |
|
|
結構體 |
function |
|
nil |
函數 |
interface |
|
nil |
介面 |
map |
|
nil |
字典,參考型別 |
slice |
|
nil |
切片,參考型別 |
channel |
|
nil |
通道,參考型別 |
2.類型別名
設定類型別名後可以讓代碼可讀性更強,一目瞭然這個變數做什麼用的:
type ( ByteSize int64)
3.變數的聲明與賦值
- 變數的聲明: var a int
- 變數的賦值:a = 123
- 聲明並賦值: var a int = 123 (此時若省略類型,則編譯器根據值自動推導類型)
- 多個變數的聲明
並行方式(可以省略類型,由值推導)
var a, b, c, int = 1, 2, 3
函數內部聲明變數的簡寫形式:
funciont main(){ a:= 1}
函數多個傳回值時可以用"_"忽略傳回值
a, _, c, d := 1, 3, 4
4.類型轉換
- go中不存在隱式轉換,所有類型轉換必須顯示聲明
- 轉換隻能發生在兩種相互相容的類型之間
- 類型轉換的格式:
var a float32 = 1.1b := int(a)
如果轉換的目標是指標、單向通道或沒有傳回值的函數類型,那麼必須使用括弧,以避免造成文法分解錯誤。
fun main() { x := 100 p := *int(&x) //錯誤:cannot convert &x (type *int) to type int // invalid indirect of int(&x) (type int) fmt.Println(p)}
正確的做法是用括弧,讓編譯器將*int解析未指標類型。
(*int)(p)(<-chan int)(c)(func())(x)