channel(3) 一 基本定義

2022-08-24 07:54:09 字數 1643 閱讀 7099

1.channel概念:

類似管道pipe

先進先出

執行緒安全,多個goroutine同時訪問,不需要加鎖

channel是有型別的,整數型別的channel只能存放整數型別的資料

2.channel宣告 

var 變數名 chan 型別

var test chan int

var test chan string

var test chan map[string]string

var test chan stu

var test chan *stu

3.channel類似於map,slice必須進行初始化

var test chan int

test = make(chan int,100)    //在這裡如果容量為0,會是什麼結果呢?

4.channel接收資料和讀取資料

intchan <-10    //把資料傳送到管道中

result := <- intchan //從channel中讀取資料,並賦值給result

接上面的疑問,如果容量為0,會是什麼情況呢?還有一些問題來一一驗證

沒有初始化的情況:(報錯 nil chan)

import(

"fmt"

)func main()

初始化後,容量 為0:

import(

"fmt"

)func main()

還是報錯,不太明顯,我們換一種方法來測試:

import(

"fmt"

"time"

)func main() ()

time.sleep(time.second*100)

result:= <- c

fmt.println(result)

}//執行結果,會立馬輸出「start input to the channel」 這一行,然後等待100s後,會輸入result結果10。因為容量為0的話,指的是channel沒有快取容量 ,就是不能夠快取任何資料,如果容量改為1的話,會立馬輸出start和end兩句話。

5.channel 許可權控制

var intchan chan <- int  //intchan只可接收int型別資料

var intchan <- chan int  //只可以從intchan中讀取資料

var intchan chan int   //即可以接收也可也讀取資料

package main

import(

"fmt"

"sync"

)var waitgroup sync.waitgroup

func senddate(c chan <- string)

func getdate(c <- chan string)

fmt.println(input)

} waitgroup.done()

}func main()

上面的**中有許可權的控制,goroutine和chan相結合。還有乙個檢查chan是否關閉

input,ok := <-c

遍歷chan中的元素:

for input := range c

PL SQL的定義(一)基本結構

謝謝 sql語言不可以使用邏輯處理結構 pl sql就將sql語言和程式語言結合在一起 在sql語言的基礎上增加了程式語言的特性,其實還有引數傳遞和sql 重用的優勢 其基本結構如下 包括了宣告部分,程式段開始,程式段結束,異常處理 宣告部分和異常部分是可選的 變數的宣告,它的有效作用域僅僅限於當前...

一 巨集定義(3) 檢視巨集展開

從乙個巨集定義開始說起 define mul a,b a b 乍看之下這個巨集定義並沒有什麼問題,但是當你採用如下用法的時候就會出現問題了 int main char argv intargc 執行後輸出 可以看到結果並不是我們預期的 5 9 45,這個時候我們可能就會想到怎麼去檢視巨集展開後是變成...

有關植物的一些基本定義

1.灌木 灌木指那些沒有明顯的主幹 呈叢生狀態比較矮小的樹木,一般可分為觀花 觀果 觀枝幹等幾類,矮小而叢生的木本植物。是多年生。一般為闊葉植物,也有一些針葉植物是灌木,如刺柏。灌木 高3.5m以下,通常叢生無明顯主幹的木本植物,但有時也有明顯主幹。如麻葉繡球 牡丹。2.喬木 喬木是指樹身高大的樹木...