编写一个程序,从文件读取内容到map,然后循环处理读取到的内容,却会出现重复内容

ylqjgm · · 1775 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

我的流程是这样的: 从文件hash.log中读取infohash到一个map[string]int变量hashlist中,读取格式为:hashlist["infohash值"]=1,infohash是有重复值的,在读取的时候,如果遇到重复值,hashlist["infohash"]的值就会自动加1,就编程了hashlist["infohash"]=2,如果没有重复值,则默认为1 当全部读取完成后,使用range来处理map变量,将其中的每一条infohash写入数据库,使用go来并发处理,但是实际操作时却发现,虽然map变量中没有重复值,但实际操作时,却发现循环一旦开始,每次都只会重复一条数据 我的代码如下: ```go for { //e := os.Chdir("/tmp/torrent/") e := os.Chdir(path + "torrent/") if e != nil { //os.Mkdir("/tmp/torrent/", 0) os.Mkdir(path+"torrent/", 0) } s := time.Now().Format("20060102") f, err := os.Open(path + "hash/" + s + ".log") if err != nil { continue } defer f.Close() var hashList = make(map[string]int) bf := bufio.NewReader(f) for { line, isPrefix, err := bf.ReadLine() if err == io.EOF { break } if err != nil { panic(err) } if isPrefix { fmt.Println("Line too long") } if _, ok := hashList[string(line)]; ok { hashList[string(line)]++ } else { hashList[string(line)] = 1 } } ch := make([]chan int, 128) no := 0 var lis = make(map[string]int) for k, v := range hashList { _, ok := lis[k] if ok { continue } if len(lis) >= 128 { lis = make(map[string]int) } lis[k] = v if no >= 128 { popChan(ch) no = 0 } ch[no] = make(chan int) go func(chx chan int, nox int) { fmt.Println(k) n, err := pullTorrent(k, v) if n != 0 { if err != nil { fmt.Println(err) } } chx <- nox }(ch[no], no) no++ } time.Sleep(10 * time.Second) } ``` 比如我的文件中有: ```aaaa bbbb cccc cccc``` 这样的几条infohash,读取后,循环开始,第一次执行就会全部都是cccc,请问要怎么处理?

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1775 次点击  
加入收藏 微博
2 回复  |  直到 2015-05-20 05:48:34
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传