基礎的數據類型:golang
布爾類型:bool
整型:int八、uint8(byte)、int1六、int(平臺相關)、uint(平臺相關)、uintptr(同指針,32位平臺爲4字節,64位平臺爲8字節)
浮點類型:float3二、float64
複數類型:complex6四、complex128
字符串:string
字符類型:rune
錯誤類型:error
複合類型:數組
指針(pointer)
數組(array)
切片(slice)
字典(map)
通道(chan)
結構體(struct)
接口(interface)
Go 語言在聲明變量時,自動對變量對應的內存區域進行初始化操做。每一個變量會初始化其類型的默認值,例如:
整型和浮點型變量的默認值爲 0。
字符串變量的默認值爲空字符串。
布爾型變量默認爲 bool。
切片、函數、指針變量的默認爲 nil。
1、布爾類型app
var v1 bool
v1 = true
布爾類型不能接受其餘類型的賦值,不支持自動或強制的類型轉換。函數
2、字符類型ui
var str string str = "Hello world"
3、數組類型spa
聲明變量及初始化第一種:.net
var team [3]string team[0] = "hammer" team[1] = "soldier" team[2] = "mum"
聲明變量及初始化第二種:指針
var a [5] int = [5]int{1,2,3,4,5} var a = [5]int{1,2,3,4,5} var a = [5]int{1,2,3} var a = [...]int{1,2,3,4,5} var a = [5]string{1:'abc',4:'efg'}
4、切片code
切片藉助數組的建立:blog
var a [5]int var b []int = a[0:1] var b []int= []int{1,2,3,4,5}
直接建立:
a := make([]int,5)//初始元素個數爲5的數組切片,元素初始值爲0
a := make([]int,5,10)//初始元素個數爲5的數組切片,元素初始值爲0,並預留10個元素的存儲空間
len(a):數組切片中當前存儲的元素個數。
cap(a):返回的是數組切片分配的內存空間。
切片沒有刪除功能。
向切片數組中追加值:
第一種:
a := make([]int,5)//初始元素個數爲5的數組切片,元素初始值爲0
a = append(a, 1,2,3)
第二種:
a := []int{1,2,3}
b = append(b,a...)
切片的拷貝:
slice1 := []int{1,2,3,4,5} slice2 := []int{3,4,5} copy(slice2,slice1) //只會複製slice1的前3個元素到slice2中 copy(slice1,slice2) //只會複製slice2的前3個元素到slice1中的前3個位置
切片的排序:
sort.Strings(slice1)
sort.Ints(slice1)
5、map
map的建立和初始化第一種:
var a map[string]string = map[string]string{"hello":"world"}
map的建立和初始化第二種:
a := make(map[string]string, 10) a["hello"] = "world"
相關操做:
val, ok:= a["hello"] //查找 for k, v := range a { //遍歷 fmt.Println(k,v) } delete(a, "hello") //刪除 len(a) //長度
sync.Map有如下特性:
var scene sync.Map // 將鍵值對保存到sync.Map scene.Store("greece", 97) scene.Store("london", 100) scene.Store("egypt", 200) // 從sync.Map中根據鍵取值 fmt.Println(scene.Load("london")) // 根據鍵刪除對應的鍵值對 scene.Delete("london") // 遍歷全部sync.Map中的鍵值對 scene.Range(func(k, v interface{}) bool { fmt.Println("iterate:", k, v) return true })
6、 列表 list
在 Go 語言中,將列表使用 container/list 包來實現,內部的實現原理是雙鏈表。列表可以高效地進行任意位置的元素插入和刪除操做。
列表與切片和 map 不一樣的是,列表並無具體元素類型的限制。
列表的初始化一:
lis := list.New()
列表的初始化二:
var lis list.List
列表的相關操做:
雙鏈表支持從隊列前方或後方插入元素,分別對應的方法是 PushFront 和 PushBack。
提示
這兩個方法都會返回一個 *list.Element 結構。若是在之後的使用中須要刪除插入的元素,則只能經過 *list.Element 配合 Remove() 方法進行刪除,這種方法可讓刪除更加效率化,也是雙鏈表特性之一。
lis := list.New() // 尾部添加 lis.PushBack("canon") // 頭部添加 lis.PushFront(67) // 尾部添加後保存元素句柄 element := lis.PushBack("fist") // 在fist以後添加high lis.InsertAfter("high", element) // 在fist以前添加noon lis.InsertBefore("noon", element) // 刪除 lis.Remove(element)