Data Type - cruisechang/wiki-golang GitHub Wiki
Golang 對資料的原則
- 建議針對情況使用較精確的類型。避免浪費資源。
- 宣告即初始化。變數宣告即可初始化,沒有指定值的變數,會初始化為零值。
- 方便使用,初始化方式有多種。
- 容器類型的初始化都是{}。
- 容器類型的元素值表示法都是{element,element,....}。
- 容器類型宣告時可以只指定一部分的元素值。
Basic Data Type
Type List
byte zero value
bool 1 false
byte 1 0 也可當成uint8
rune 4 0 專用來存unicode。也可看成int32。
int/uint - 0 byte length depend on os
int8/uint8 1 0
int16/uint16 2 0
int32/uint32 4 0
int64/uint64 8 0
float32 4 0.0
float64 8 0.0
complex64 8 0.0+0.0i
complex32 16 0.0+0.0i
string - ""
整數表示法 10進制 8進制=0開頭 16進制=0x開頭
rune專門用來存放Unicode編碼,rune有多種表示法。不同表示法有各自的表示範圍
var r rune
r='a' or '-' or '_' //只要是Unicode編碼的字
r='\xFF'
r='\063'
r='\u4E00' //四位十六進制
r='\U4E000041' //八位十六進制
//可用來表示特殊符號(只有下列這些,其餘不合法)
'\n' U+000A \\換行
'\r' U+000D \\換頁
'\a'
'\b'
'\f'
'\t'
'\v'
'\\'
'\''
'\"'
//只有這些,其餘的不合法
.....
Container Data Type
Type List
值類型 參考類型 zero value
Array o x nil //尚未初始化之前
Slice x o nil //尚未初始化之前
Map x o nil //尚未初始化之前
Struct o x nil //尚未初始化之前
Channel x o nil //尚未初始化之前
只有Slice/Map/Channel三種是Reference Type,其餘都是Value Type。
Value Type(值類型),Reference Type(參考類型)跟function arguments 的pass value(傳值)/pass reference(傳參考)是兩件事。
Golang中的Function(含Method)所有arguments都是pass value,無論value的data type為何。
Array
- 宣告及初始化
[n]T
-
宣告要指名長度及元素類型
-
長度n,元素類型為T的Array
-
長度無法更改
-
不同長度但元素類型相同的Array,是不相等的。
var a [6]int //全部未賦值,初始都是int零值
a:=[6]int{} //全部未賦值,初始都是int零值
a:=[6]int{1,2,3} //部分元素賦值,未賦予值的會是零值
a:=[6]{0:1,1:4} //指定部分index的元素的初始值,未賦值的是零值
a:=[6]{0:1,3:3} //不合法。索引必須照順序
a[0]=3 //賦予某元素值
- 傳值類型
當賦值或參數傳送是會複製一份array傳進去,效能較差。
可使用取址操作,取得指標,然後傳送指標。
每個變數都有類型
golang的變數在編譯時都有已知的類型,且是不可變的。
以下兩個變數的底層類型都相同,但是要經過轉換才能互相指派。
type MyInt int
var i int
var j MyInt