在go語言中需要使用內建函式make來建立乙個通道
make的第乙個引數是關鍵字chan,之後跟著允許通道交換的資料型別。如果建立的是乙個有快取的通道,之後還要再第二個引數指定快取區的大小。
//無快取的整形通道
unbuffered:=
make
(chan
int)
//有快取的字串通道
buffered:=
make
(chan
string,10
)
向通道傳送值或指標需要用到 <- 操作符
//建立乙個有快取的字串通道
buffered:=
make
(chan
string,10
)//通過通道傳送乙個字串
buffered<-
"gopher"
//從通道接受乙個字串
value:=
<-buffered
注:
無緩衝的通道是指在接收前沒有能力儲存任何值得通道,這種通道要求傳送goroutine和接收goroutine同時準備好,才能完成傳送和接收的操作,如果兩個goroutine沒有同時準備好,通道會導致先執行傳送或接收的goroutine阻塞等待,這種對通道進行傳送和接受的行為本身就是同步的,其中任意乙個操作都無法離開另乙個操作而單獨存在。
有緩衝通道是乙個在被接受前能儲存乙個或多個值的通道。這種型別的通道並不強制要求goroutine之間必須同時完成傳送和接收,通道會阻塞傳送和接收的動作也會不同,只有在通道沒有要接收的值時,接收動作才會阻塞,只有通道沒有可用快取區容納被傳送的值時,傳送動作才會被阻塞,這導致有快取的通道和無快取的通道之間的乙個很大的不同:無緩衝的通道保證進行傳送和接收的goroutine會在同一時間進行資料的交換,有緩衝的通道沒有這種保證。
關閉通道:當通道關閉後,goroutine依舊可以從通道接收資料,但不能再向通道裡傳送資料。
從乙個已經關閉且沒有資料的通道裡獲取資料,總會立刻返回,並返回乙個通道型別的零值。
C 的一些細節
1.c 中,將負數賦值給unsigned是完全合法的。例如,將 1賦值給unsigned char,那麼結果是255.2.c 中,double的精度和計算速度都要超過float,long double則需要承擔額外的執行代價。3.std ou t hi d endl 等價於std out hi 4....
迴圈的一些細節
1 迴圈執行次數相同,大迴圈放在外面還是小迴圈放在外層效率高呢?int end1 10 int end2 100 int end3 1000000 long starttime system.nanotime 開始時間 for int i 1 i end3 i long endtime system...
SDWebImage的一些細節
清空快取 cleandisk 清除過期快取,計算當前快取的大小,和設定的最大快取數量比較,如果超出那麼會繼續刪除 按照檔案穿件的先後順序 cleardisk 直接刪除重新建立 7天 sdwebimagemanager sharedmanager imagecache cleandisk 取消當前所有...