// Copyright 2024 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package bytesimport ()// Lines returns an iterator over the newline-terminated lines in the byte slice s.// The lines yielded by the iterator include their terminating newlines.// If s is empty, the iterator yields no lines at all.// If s does not end in a newline, the final yielded line will not end in a newline.// It returns a single-use iterator.func ( []byte) iter.Seq[[]byte] {returnfunc( func([]byte) bool) {forlen() > 0 {var []byteif := IndexByte(, '\n'); >= 0 { , = [:+1], [+1:] } else { , = , nil }if !([:len():len()]) {return } }return }}// explodeSeq returns an iterator over the runes in s.func explodeSeq( []byte) iter.Seq[[]byte] {returnfunc( func([]byte) bool) {forlen() > 0 { , := utf8.DecodeRune()if !([::]) {return } = [:] } }}// splitSeq is SplitSeq or SplitAfterSeq, configured by how many// bytes of sep to include in the results (none or all).func splitSeq(, []byte, int) iter.Seq[[]byte] {iflen() == 0 {returnexplodeSeq() }returnfunc( func([]byte) bool) {for { := Index(, )if < 0 {break } := [:+]if !([:len():len()]) {return } = [+len():] } ([:len():len()]) }}// SplitSeq returns an iterator over all substrings of s separated by sep.// The iterator yields the same strings that would be returned by Split(s, sep),// but without constructing the slice.// It returns a single-use iterator.func (, []byte) iter.Seq[[]byte] {returnsplitSeq(, , 0)}// SplitAfterSeq returns an iterator over substrings of s split after each instance of sep.// The iterator yields the same strings that would be returned by SplitAfter(s, sep),// but without constructing the slice.// It returns a single-use iterator.func (, []byte) iter.Seq[[]byte] {returnsplitSeq(, , len())}// FieldsSeq returns an iterator over substrings of s split around runs of// whitespace characters, as defined by unicode.IsSpace.// The iterator yields the same strings that would be returned by Fields(s),// but without constructing the slice.func ( []byte) iter.Seq[[]byte] {returnfunc( func([]byte) bool) { := -1for := 0; < len(); { := 1 := rune([]) := asciiSpace[[]] != 0if >= utf8.RuneSelf { , = utf8.DecodeRune([:]) = unicode.IsSpace() }if {if >= 0 {if !([::]) {return } = -1 } } elseif < 0 { = } += }if >= 0 { ([:len():len()]) } }}// FieldsFuncSeq returns an iterator over substrings of s split around runs of// Unicode code points satisfying f(c).// The iterator yields the same strings that would be returned by FieldsFunc(s),// but without constructing the slice.func ( []byte, func(rune) bool) iter.Seq[[]byte] {returnfunc( func([]byte) bool) { := -1for := 0; < len(); { := 1 := rune([])if >= utf8.RuneSelf { , = utf8.DecodeRune([:]) }if () {if >= 0 {if !([::]) {return } = -1 } } elseif < 0 { = } += }if >= 0 { ([:len():len()]) } }}
The pages are generated with Goldsv0.7.3. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.