map 是 key-value 数据类型数组
maps := make(map[string]string,10) maps["hero1"] = "张三" maps["hero2"] = "李四" maps["hero3"] = "王五"
1) map 再使用前必定要make协程
2) map 的key 是不能重复的,若是重复了,则会覆盖前的的keyblog
3) map 的 value 是能够相同的string
4) map 的key-value 是无序的class
数组是存放多个同一类型的数据,数组也是一种数据类型,在Go中,数组的值类型map
//定义一个存放10个string类型的数组 var arr [10] string arr[0] = "你好" arr[1] = "真好" //定义一个存放5个string类型的数组 var arr2 [5] string arr2[0] = "你好" arr2[1] = "真好" //快速声明数组 arrString := [...]string{ "1", "2", "3", }
1) [10] string 和 [5] string 都是string的类型的数组,即便都是存放string类型,可是存放的个数不同,就不是同一数据类型,Go语言是严格区分数据类型的数据类型
2) 数组是经过下标的访问的,下标从0开始引用
slice能够理解成动态数组,容量的能够动态变化的,也就是存放的个数不限制channel
//快速声明数组 arrString := [...]string{ "1", "2", "3", } fmt.Printf("type:%T,value:%v\n",arrString,arrString) //slice的声明方式一,直接从数组里面切出来 sliceByArray := arrString[0:] fmt.Printf("type:%T\n", sliceByArray) //slice的声明方式二,经过make sliceByMake := make([]string,10) sliceByMake[0] = "啦啦啦" sliceByMake[1] = "阿拉蕾" fmt.Printf("type:%T,value:%v\n",sliceByMake,sliceByMake) //slice的声明方式三,定义个切片 slices := []string{ "嗯哼", "是的", } fmt.Printf("type:%T,value:%v\n",slices,slices)
1) slice也是经过下标去访问数据
//定义一个struct type Person struct { Name string Age int }
1) struct 其实就是OOP里面的类,至关于Java里面的Class
channel 是引用类型,必须初始化以后才能使用,也就是要make一下
//建立一个channel 存放string类型的数据 channel := make(chan string,10) //往channel 里面存数据 //注意,存数据的时候,若是超出容量的话,是会保存的,要考虑好管道里面数据的流动,便是有进有出 channel <- "你好吖" //从channel 里面取数据 <- channel fmt.Printf("channel len:%v ; cap=%v \n",len(channel),cap(channel))
1) channel 里面存放指定的数据类型
2) channel 的数据放满后,就不能再继续存放了,只有从里面取出数据,才能再存放数据了
3) 在没有使用协程的状况下,若是channel 数据取完了,再取,就会报 dead lock (死锁)