channel的讀取方式

2021-09-25 04:38:48 字數 606 閱讀 6707

1.對於有緩衝的channel,乙個乙個讀顯得有些麻煩,可以採用range的方式

ch := make(chan int, 3)

ch <- 1

ch <- 2

ch <- 3

for v := range ch

但上面這段**有個問題,range並不會因為chanel為空而停止迴圈,因而發生了死鎖,

避免的方法有如下三種:

1.傳送完之後及時關閉channel,chanel關閉之後,是可讀不可寫的,這時候range不會死鎖,只是會死迴圈一直刷0

ch := make(chan int, 3)

ch <- 1

ch <- 2

ch <- 3

close(ch)

for v := range ch

2.讀取完之後關閉channel或者退出range

ch := make(chan int, 3)

ch <- 1

ch <- 2

ch <- 3

for v := range ch

}

go 從已關閉的channel讀取資料

剛接觸go的channel,我在思考乙個問題,chan是傳送方關閉,還是接收方關閉,如果是傳送方關閉,傳送方發完資料,就關閉chan,那可能接收方還沒接收完資料,讀取關閉的通道會怎樣?可以看到從已經關閉的chan是讀取資料是沒有問題的,但讀取完chan的資料後再讀取會返回false和預設值0這樣又產...

讀取檔案的方式

讀取檔案的方式 1.for的方式 資料量下的時候可以使用,或者每行資料都是長度差不多的時候,可以使用,如果有部分行數資料超多或者不規範的話,建議使用while方式,while方式可以固定每次讀取的資源數,便於記憶體的運轉 with open test.txt mode rt encoding utf...

檔案讀取方式

過程 1.開啟檔案 2.讀資料 3.關閉檔案 1,w 寫模式,它是不能讀的,如果用w模式開啟乙個已經存在的檔案,會清空以前的檔案內容,重新寫 w 是讀寫內容,只要沾上w,肯定會清空原來的檔案 2,r 讀模式,只能讀,不能寫,而且檔案必須存在 r 是讀寫模式,只要沾上r,檔案必須存在 3,a 追加模式...