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 追加模式...