1. 程式人生 > 實用技巧 >GO精髓(Channel)

GO精髓(Channel)

通道(Channel)

       /*
	通道(channel)是用來傳遞資料的一個數據結構。
	*/
	ch1 := make(chan int ,2) //建立一個可讀可寫的雙向管道
	ch1 <- 10
	ch1 <- 12

	m1 := <-ch1
	m2 := <-ch1
	fmt.Println(m1,m2)

	ch2 := make(chan <- int ,2) //建立一個只可寫的管道
	ch2 <- 10
	ch2 <- 12
	ch3 := make(<-chan  int ,2) //建立一個只可讀的管道

select(多路複用)

//定義個管道 10個數據int
	intChan := make(chan int,10)
	for i:=1 ; i< 10 ;i++ {
		intChan <- i
	}
	
	//定義個管道 10個 資料string
	stringChan := make(chan string ,10)
	for i:=1 ;i < 5 ;i++ {
		stringChan <- "hello"+fmt.Sprintf("%d",i)
	}
	//使用select不需要關閉channel
	for  {
		select {
		case v := <-intChan:
			fmt.Println("從intChan裡面取資料%d",v)
			time.Sleep(time.Millisecond * 50)
		case v := <-stringChan:
			fmt.Println("從stringChan裡面取資料%v",v)
			time.Sleep(time.Millisecond * 50)
		default:
			fmt.Println("所有資料獲取完畢")
			return  //跳出迴圈
		}
	}