美文网首页Golang
记一次使用chan []byte踩的坑

记一次使用chan []byte踩的坑

作者: WinddddRunner | 来源:发表于2018-03-22 22:57 被阅读55次

通过ChannelInputStream生产数据,返回chan []byte,Consumer消费数据,但是出现 Consumer接收的数据不完整重复的现象,经排查是因为slice惹的祸。代码和注释如下

func Consumer(writer io.Writer){
     channelInputStream := ChannelInputStream(reader)
     for p := range channelInputStream {
            _, err = writer.Write(p)
            if err != nil {
                panic(err)
            }
      }
}

func ChannelInputStream(reader io.Reader) chan []byte {
    out := make(chan []byte, 1024)
    go func() {
        buffReader := bufio.NewReader(reader)
        //buff := make([]byte, 1024) 错误的做法
        for {
            buff := make([]byte, 1024) //一定要在这里实例化
            rn, err := buffReader.Read(buff)
            if err != nil {
                if err == io.EOF {
                    close(out)
                    break
                } else {
                    panic(err)
                }
            }
            out <- buff[:rn] 
          //如果在for循环外面make buff,每次写入channel的slice都是指向同一个数组,
          //如果buff的值变了,会导致写入的slice映射的数组的值发生变化,
          //这样消费者range得到的数据是混乱的被覆盖的
        }
    }()
    return out
}

相关文章

  • 记一次使用chan []byte踩的坑

    通过ChannelInputStream生产数据,返回chan []byte,Consumer消费数据,但是出现 ...

  • [ANR Warning]onMeasure time too

    ConstraintLayout 踩坑记一次封装组合控件时的坑,我才用了集成 ConstraintLayout 来...

  • flutter使用fishredux管理数据后自定义TabCon

    flutter使用fishredux管理数据后自定义TabController flutter小白踩坑记。学习fl...

  • springboot集成swagger2深坑

    记录一次swagger2踩坑记,网上资料杂乱而不完整,自己踩的坑还算比较多,记录下自己的解决历程 一、首次来看看遇...

  • Deepin使用踩坑记

    1. 前言 很喜欢Deepin,奈何坑太多,不过不怕,踩过去~ 2. 踩坑记 2.1 Deepin重启后文件管理器...

  • Yeoman使用踩坑记

    官网传送门:https://yeoman.io/authoring/index.html 1.npm link 后...

  • RestTemple 使用踩坑记

    一、依赖问题 我用的是 spring 4.0版本 二、解决 no suitable HttpMessageConv...

  • Git使用踩坑记

    前言 一直没空写博客,都忘了Git命令的使用在本地换了博客头像,准备上传输入了如下命令 报错 原因 重复操作,这个...

  • git使用踩坑记

    1、Authentication failed for 'http://git........' 原因:帐号密...

  • 移动端的头尾固定问题

    新起了个移动端项目,在头位固定问题上又踩了一次踩过的坑。爬起来之后弹弹土,乖乖的坐下来码字,把踩坑换来的经验教训记...

网友评论

    本文标题:记一次使用chan []byte踩的坑

    本文链接:https://www.haomeiwen.com/subject/wugzqftx.html