type slice struct{
array unsafe.Pointer
lenintcapint}
切片的初始化
funcmain(){
var s []int//切片声明,array=nil,len=cap=0
s =[]int{
}//初始化,len=cap=0
s =make([]int,3)//初始化,len=cap=3
s =make([]int,3,5)//初始化,len=3,cap=5
s =[]int{
1,2,3,4,5}//初始化,len=cap=5
s2d :=[][]int{
{
1},{
2,3},//二维数组各行的列数相等,但二维切片各行的len可以不等}}
funcmain(){
var m map[string]int//声明map,指定key和value的数据类型
m =make(map[string]int)//初始化,容量为0
m =make(map[string]int,5)//初始化,容量为5。强烈建议初始化时给一个合适的容量,减少扩容的概率
m =map[string]int{
"语文":0,"数学":39}//初始化时直接赋值}
funcmain(){
var ch chanint//声明
ch =make(chanint,8)//初始化,环形队列里可容纳8个int}
channel的len和cap
funcmain(){
var ch chanint
fmt.Printf("ch is nil %t\n", ch ==nil)//ch is nil true
fmt.Printf("len of ch is %d\n",len(ch))//len of ch is 0
ch =make(chanint,10)
fmt.Printf("len of ch is %d\n",len(ch))//len of ch is 0
fmt.Printf("cap of ch is %d\n",cap(ch))//cap of ch is 10}
channel的cap上限:达到cap的上限后,继续send会导致管道阻塞
funcmain(){
ch :=make(chanint,10)for i :=0; i <10; i++{
ch <-3}
fmt.Printf("len of ch is %d\n",len(ch))//len of ch is 10
fmt.Printf("cap of ch is %d\n",cap(ch))//cap of ch is 10
ch <-3//阻塞
fmt.Printf("len of ch is %d\n",len(ch))//不会打印
fmt.Printf("cap of ch is %d\n",cap(ch))//不会打印}
send和recv
funcmain(){
ch :=make(chanint,8)//初始化,环形队列里可容纳8个int
ch <-1//往管道里写入(send)数据
ch <-2
ch <-3
ch <-4
ch <-5
v :=<-ch //从管道里取走(recv)数据
fmt.Println(v)//1
v =<-ch
fmt.Println(v)//2}
channel遍历:
通过for range的方式遍历管道,遍历前必须先关闭close(ch)管道,禁止再写入元素;
一旦close就不能再往管道里面追加元素
close(ch)//遍历前必须先关闭管道,禁止再写入元素//遍历管道里剩下的元素for ele :=range ch {
fmt.Println(ele)//3 4 5}