
我认为这是一个错误,因为即使返回的令牌为nil(bufio.SplitFunc),也不会将Advance
value> 0用作进一步的读取调用:
这是怎么回事如果数据尚未持有完整的令牌,例如,如果在扫描行时没有换行符,则SplitFunc可以返回(0,nil),以指示扫描程序将更多数据读入切片,并尝试以更长的切片开始于输入中的相同点。
bufio.Scanner默认的输入缓冲区为4096字节。这意味着它会一次读取最多此数量的内容,然后执行split功能。在您的情况下,扫描器可以一次读取所有输入,因为它远低于4096字节。
这意味着下一次读取将产生结果,
EOF这是这里的主要问题。一步步
scanner.Scan
读取您的所有数据- 您得到了那里的所有文本
- 您寻找令牌,找到第一个换行符,它只是一个换行符
nil
通过从比赛中删除换行符来作为令牌返回scanner.Scan
假设:用户需要更多数据scanner.Scan
尝试阅读更多EOF
发生scanner.Scan
尝试最后一次标记化- 你发现
"Just a test."
scanner.Scan
尝试最后一次标记化- 您寻找令牌,找到第三行,它只是一个换行符
nil
通过从比赛中删除换行符来作为令牌返回scanner.Scan
看到nil
令牌并设置错误(EOF
)- 执行结束
任何非null的令牌都将阻止这种情况。只要您返回非零令牌,扫描程序就不会检查
EOF并继续执行令牌生成器。
您的代码返回
nil令牌的原因是什么也没做就
bytes.Replace返回
。。你可以阻止这种通过用容量返回片并没有元素,因为这将是非零:。
nil
append([]byte(nil),nil...) == nil``make([]byte, 0, 1) != nil
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)