关于bufio包中Scan方法的疑问

tianlei · · 2770 次点击
谢谢指教,语言层面不能做限制的思路我理解了,但是不明白的是,9223372036854775807这个数字是和len(s.buf)比较,那应该是表示byte的长度,约等于8589934591G(9223372036854775807 / 1024 /1024 / 1024)?
#2
更多评论
你的机器太弱了,你可以自己做限制,但是语言层面不能做限制
#1
虽然NewScanner里设置的是ScanLines和MaxScanTokenSize,但是split函数可以通过func (s *Scanner) Split(split SplitFunc)设置,maxTokenSize可以通过func (s *Scanner) Buffer(buf []byte, max int)设置。 正常扫描在for循环的第一个if就退出了,其他则是split没有返回一个非空token,主要是空buf和buf空间不足。可以设置空buf,所以会有一个莫名其妙的startBufSize;buf空间不足,左移数据且扩容,maxInt = int(^uint(0) >> 1),那就是2^31 - 1,maxInt / 2就是2^30,也就是GO限死了最多设置buf为2^30个字节
#3