package main
import “fmt”
func main(){
//1)创建一个intChan,最多可以存放3个int,演示存3数据到intChan,然后在取出这三个int
var intChan chan int
intChan = make(chan int,3)
intChan <- 10
intChan <- 20
intChan<-10
//因为intChan的容量为3,再存放会报告deadlock
//intChan<-50
num1 :=<- intChan
num2 :=<- intChan
num3 :=<- intChan
//因为intChan这时已经没有数据了,再取就会报告deadlock
//num4:=<-intChan
fmt.Printf(“num1=%v num1=%v num1=%v”,num1,num2,num3)
//2)创建一个mapChan,最多可以存放10个map[string]string的key-val,演示写入和读取。
var mapChan chan map[string]string
mapChan=make(chan map[string]string,10)
m1:=make(map[string]string,20)
m1["city1"]="北京"
m1["city2"]="天津"
m2:=make(map[string]string,20)
m2["hero1"]="宋江"
m2["hero2"]="武松"
m3:=make(map[string]string,20)
m3["hero3"]=".。。"
mapChan<-m1
mapChan<-m2
mapChan<-m3
//3)创建一个catChan,最多可以存放10个Cat结构体变量,演示写入和读取的用法
type Cat struct {
Name string
Age int
}
var catChan chan Cat
catChan = make(chan Cat ,10)
cat1 :=Cat{Name:"tom",Age:18,}
cat2 :=Cat{Name:"tom",Age:18,}
catChan<-cat1
catChan<-cat2
//取出
cat11:=<- catChan
cat22:=<- catChan
fmt.Println(cat11,cat22)
fmt.Println("________________________________________")
//定义一个存放任意数据类型的管道3个数据
//var allChan chan interface{}
allChan := make(chan interface{},3)
allChan<-10
allChan<-"tom jack"
cat:=Cat{"小花猫",4}
allChan<-cat
//我们希望获得到管道中的第三个元素,则先将前2个推出
<-allChan
<-allChan
newCat:=<-allChan//从管道中取出的Cat是什么?
fmt.Printf("newCat=%T,newCat=%v\n",newCat,newCat)
//下面的写法是错误的!编译不通过
//fmt.Printf("newCat.Name=%v",newCat.Name)
//使用类型断言
a:=newCat.(Cat)
fmt.Println("newCat.Name=%v",a.Name)
}