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 (死鎖)