-
Notifications
You must be signed in to change notification settings - Fork 18.3k
Closed as not planned
Description
Proposal Details
Once iterators are introduced in 1.23 there is growing number of libraries based on this feature. Reading data by lines or words are quite common task and could be accomplished with for ... range
loop. It requires just two simple methods for bufio.Scanner
:
func (s *Scanner) TextSeq() iter.Seq[string] {
return func(yield func(string) bool) {
for s.Scan() {
if !yield(s.Text()) {
break
}
}
}
}
func (s *Scanner) BytesSeq() iter.Seq[[]byte] {
return func(yield func([]byte) bool) {
for s.Scan() {
if !yield(s.Bytes()) {
break
}
}
}
}
Reading whole file as collection of lines could be like:
f, err := os.Open("file.txt")
if err != nil {
panic(err)
}
defer f.Close()
scanner := bufio.NewScanner(f)
// read all lines as slice of strings
lines := slices.Collect(scanner.TextSeq())
// instead of:
// lines := make([]string, 0)
// for scanner.Scan() {
// lines = append(lines, scanner.Text())
// }
DeedleFakeadonovan
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Declined