• Rob Pike's avatar
    bufio: fix scanning with a final empty token. · ec127547
    Rob Pike authored
    The Scan function's interface to the split function was not sufficient
    to handle an empty final token in a pure function; state was required.
    This was ugly.
    
    We introduce a special error value that a split function can return
    that signals that this token is OK, but is the last one and scanning
    should stop immediately _after_ this token.
    
    The same effect could be achieved using the same trick (a special
    error value) and checking for that error after Scan finishes, but it's
    a little clumsy. Providing a published sentinel value in bufio is
    cleaner and means everyone can use the same trick. The result
    is an error-free scan.
    
    Rewrite the test (that was only barely working) to use the value
    and be more robust.
    
    Also write a new example showing how to do it.
    
    Fixes #11836
    
    Change-Id: Iaae77d0f95b4a2efa0175ced94d93c66353079e8
    Reviewed-on: https://go-review.googlesource.com/14924Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    ec127547
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
bootstrap.bash Loading commit data...
buildall.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
iostest.bash Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...