Go扫描程序包中text/scanner/scanner.go使用技巧来查找空白:
text/scanner/scanner.go
const GoWhitespace = 1<<'\t' | 1<<'\n' | 1<<'\r' | 1<<' '
然后:
// skip white space for s.Whitespace&(1<<uint(ch)) != 0 { ch = s.next() }
由于字符值向左移超过31,因此在某些情况下这不是唯一的吗?我的意思是,当某些char与制表符模数32相同时,它将被识别为空格吗?
完全答案:
Spec明确表示,对于无符号操作,我们会屏蔽掉高位,因此低位实际上是“环绕”的。
它起作用的原因是:
Scanner.Whitespace
uint64
GoWhitespace
s.Whitespace&(1<<uint(ch))
1 << 96