一、數據類型數組
go語言支持的基礎類型:數據結構
整型:int,int8,int16,int32,int64app
無符號整型:uint,uint8,uint16,uint32,uint64函數
其中默認類型爲int,int表示32位或64位與操做系統有關ui
字節:byte編碼
布爾:boolspa
浮點型:float32,float64,默認類型爲float64操作系統
複數:complex64(32位實部和虛部),complex128(63位實部和虛部),默認類型爲complex128指針
指針:uintptr,本質爲無符整型uint8code
字符串:string
字符:rune,本質爲int32,可表示unicode編碼
錯誤類型:error,本質爲接口
go支持的複合類型:
指針*,數組,結構體struct
切片slice,字典map,通道channel,接口interface
基礎類型的默認值:
數據類型 | 默認值 |
整型 | 0 |
浮點型 | 0 |
布爾值 | false |
字符串 | "" |
值類型和引用類型:
值類型和引用類型的區別在於,在賦值或做爲函數參數調用時,值類型會複製一份新的拷貝,新數據的修改不會影響原數據,而引用類型只會複製變量的引用,引用數據的修改會影響原數據
值類型:基礎數據類型,指針,數組,結構體
引用類型:切片,map,channel,interface
數組和切片的定義:
// 數組定義 a :=[5]int{1,2,3,4,5} a := [...]int{1,2,3,4,5} // 切片定義 a :=[]int{1,2,3,4,5} a := a[1:3]
切片底層實際是一個三元組:指針、len、cap
使用make建立切片
make是Go語言的內置函數 mySlice1 := make([]int, 5) //元素個數爲5 ,初始值爲0 mySlice2 := make([]int, 5, 10) //len爲5,cap爲10 mySlice3 := []int{1, 2, 3, 4, 5} //len爲5,cap爲5 mySlice4 := mySlice3 [1:3] // len爲2,cap爲4,容量爲1到最後
切片的容量增加:
函數append會智能地處理底層數組的容量增加,在切片容量小於1000個元素時, 老是會成倍地增長容量,一旦元素個數超過1000,時,容量的增加因子會設爲1.25,也就是每次增長25%的容量
各個類型所佔的內存(64位環境):
指針類型:8個字節
string類型:16個字節,包含一個指針,指向真實地址,和一個int類型表示長度
數組類型:總字節數爲單個元素佔用大小乘以個數
切片類型:包含一個指向數組的指針,一個int類型表示長度,一個cap類型表示容量,總共24字節
map類型:8個字節,自己爲一個指針,指向map本身
struct類型:大小爲全部成員大小的總和
interface{}:佔用內存爲16字節,包含兩個指針
map定義:
map的鍵能夠使任何值,包括內置類型或結構體,只要能夠用==進行比較,但不能是切片、函數以及包含切片的數據結構因爲具備引用語義不能做爲映射的鍵
var colors map[string]string colors["red"] = "#da1337" // panic: assignment to entry in nil map
聲明和初始化:
colors := make(map[string]string) colors := map[string]string{} 取值:color, ok := colors["red"] 遍歷:for k, v := range colors
nil切片和空切片
建立nil切片:var slice []int
建立空切片:
slice := make([]int, 0)
slice := []int{}