Go基礎語法

一、數據類型數組

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{}

相關文章
相關標籤/搜索