栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

扫描仪提前终止

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

扫描仪提前终止

我认为这是一个错误,因为即使返回的令牌为nil(bufio.SplitFunc),也不会将Advance
value> 0用作进一步的读取调用:

如果数据尚未持有完整的令牌,例如,如果在扫描行时没有换行符,则SplitFunc可以返回(0,nil),以指示扫描程序将更多数据读入切片,并尝试以更长的切片开始于输入中的相同点。

这是怎么回事

bufio.Scanner
默认的输入缓冲区为4096字节。这意味着它会一次读取最多此数量的内容,然后执行split功能。在您的情况下,扫描器可以一次读取所有输入,因为它远低于4096字节。
这意味着下一次读取将产生结果,
EOF
这是这里的主要问题。

一步步

  1. scanner.Scan
    读取您的所有数据
  2. 您得到了那里的所有文本
  3. 您寻找令牌,找到第一个换行符,它只是一个换行符
  4. nil
    通过从比赛中删除换行符来作为令牌返回
  5. scanner.Scan
    假设:用户需要更多数据
  6. scanner.Scan
    尝试阅读更多
  7. EOF
    发生
  8. scanner.Scan
    尝试最后一次标记化
  9. 你发现
    "Just a test."
  10. scanner.Scan
    尝试最后一次标记化
  11. 您寻找令牌,找到第三行,它只是一个换行符
  12. nil
    通过从比赛中删除换行符来作为令牌返回
  13. scanner.Scan
    看到
    nil
    令牌并设置错误(
    EOF
  14. 执行结束

如何规避

任何非null的令牌都将阻止这种情况。只要您返回非零令牌,扫描程序就不会检查

EOF
并继续执行令牌生成器。

您的代码返回

nil
令牌的原因是什么也没做就
bytes.Replace
返回
。。你可以阻止这种通过用容量返回片并没有元素,因为这将是非零:。
nil
append([]byte(nil),nil...) == nil``make([]byte, 0, 1) != nil



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446428.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号