map 是 key-value 数据类型
maps := make(map[string]string,10) maps["hero1"] = "张三" maps["hero2"] = "李四" maps["hero3"] = "王五"
1) map 再使用前一定要make
2) map 的key 是不能重复的,如果重复了,则会覆盖前的的key
3) map 的 value 是可以相同的
4) map 的key-value 是无序的
数组是存放多个同一类型的数据,数组也是一种数据类型,在Go中,数组的值类型
//定义一个存放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可以理解成动态数组,容量的可以动态变化的,也就是存放的个数不限制
//快速声明数组
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 (死锁)
原文:https://www.cnblogs.com/python-boy/p/12702023.html