Golang 實現多協程讀取並計算檔案數字的平方和

2021-08-19 10:03:31 字數 1354 閱讀 3977

上次面試時,面試官要求手寫**,題目:

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...