上次面試時,面試官要求手寫**,題目:
1. 多個檔案中存在著一串用空格隔開的數字
2. 讀取檔案中的數字,計算多個檔案的平方和
3. 使用多協程方式
**:
package main
import (
"flag"
"fmt"
"io/ioutil"
"os"
"strconv"
"strings"
"time"
)func power(num string) int
return n * n
}//檔案中的數字已空格隔開
func readfileandcalc(file string) int
fmt.printf("file:%s result:%v\n", file, result)
return result
}func comparelcalc(pathdir string) error else
if !f.isdir()
result :=0
files, _ := ioutil.readdir(pathdir)
ch := make(chan int, len(files)) //帶快取區的int channel
for _, f := range files (file)}}
ov := make(chan
struct{},0)
gofunc()
i++if i == len(files) {}}}
}()//超過兩分鐘,沒有結果 ---> 結束
select
return
nil}
//test
func main()
}
結果驗證:
# ls /home/test/test
ddd dmm mm
# go run comparelcalc.go -path=/home/test/test
file
:/home/test/test/ddd
result:[1
916]
file
:/home/test/test/mm
result:[1925
259259
64121
4841936
48414884
8100]
file
:/home/test/test/dmm
result:[1925
25484]
all file result = 26746
golang多協程非同步讀寫demo
package main import fmt sync func main for i 1 i 3 i setwg.wait close kk 只要乙個 chan 還有未讀的資料,即使把它 close 掉,你還是可以繼續把這些未讀的資料消費完,而且bool值為true,之後才是讀取零值資料和fal...
Golang協程排程
有時候可能會出現這種情況,乙個無恥的goroutine阻止其他goroutine執行。當你有乙個不讓排程器執行的 for迴圈時,這就會發生。package main import fmt func main for done fmt.println done for迴圈並不需要是空的。只要它包含了不...
golang 協程理解
本文總結一下go協程的理解,如有錯誤望請指正。網上都說協程是一種輕量級執行緒,執行緒又是一種輕量級的程序。這話在語言層面看來是沒有錯的,但它們的實現是不同的。執行緒是cpu資源排程的最小單位。協程不由cpu進行排程,由應用程式進行排程,也就是由go進行排程。在go中,協程的排程也有專門的排程器。但g...