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 mainimport(
"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.喬木 喬木是指樹身高大的樹木...