golang使用chan

package main

//创建处理的携程
import (
    "fmt"
    "io/ioutil"
    "os"
    "strings"
)

type FindList struct {
    ListData []string
    Readstr  chan string
    FindName string
}

func NewFindList(count int) *FindList {
    alist := make([]string, count)
    readstr := make(chan string)
    return &FindList{ListData: alist, Readstr: readstr, FindName: "go"}
}

func (mf *FindList) checkFindRet(path string) bool {
    return strings.Contains(path, mf.FindName)
}

func (mf *FindList) GetRet(list []string, aChan chan []string) {
    aSlice := make([]string, 100)

    for _, v := range list {
        if mf.checkFindRet(v) {
            aSlice = append(aSlice, v)
        }
    }
    aChan <- aSlice
}

func (mf *FindList) getFileList() []string {
    adir := "/Users/kang/Documents/GoProject"
    dir_list, e := ioutil.ReadDir(adir)
    dirlist := make([]string, 30)
    if e != nil {
        fmt.Println("read dir error")
        return dirlist
    }
    for _, v := range dir_list {
        fileStr := strings.Trim(v.Name(), " ")
        if len(fileStr) == 0 {
            continue
        }
        fileName := adir + "/" + fileStr
        _, err := os.Stat(fileName)
        if err == nil || os.IsExist(err) {
            dirlist = append(dirlist, fileName)
        }
    }
    return dirlist
}

func main() {

    finder := NewFindList(20)

    aList := finder.getFileList()
    aListLen := len(aList)
    step := (int)(aListLen / 8)

    fmt.Println(step, aListLen)

    //分配新的slice
    newSlice := make([][]string, 8)

    chanArr := make([]chan []string, 8)

    j := 0
    for i := 0; i < aListLen; i = i + step {
        chanArr[j] = make(chan []string)
        newSlice[j] = aList[i:(i + step)]
        go finder.GetRet(newSlice[j], chanArr[j])
        j++
        fmt.Println("#")
    }

    strList := make([]string, 30)
    for _, v := range chanArr {
        values := <-v
        for _, v1 := range values {

            if len(v1) == 0 {
                continue
            }
            fmt.Println(v1)
            strList = append(strList, v1)
        }
    }
    fmt.Println(len(strList))

    /*
        c := make([]chan string, 8)

        for i := 0; i < 3; i++ {
            c[i] = make(chan string)
            //go aFunc("a1", c[i])
        }
        fmt.Println(finder.ListData)
    */
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值