基础的数据类型: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)