管道的細節和課堂練習

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)

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章