加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang使用chan

发布时间:2020-12-16 18:17:02 所属栏目:大数据 来源:网络整理
导读: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 :=
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) */
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读