Slide 1

Slide 1 text

Nozomu Ikuta 25th Feb. 2025 Go 1.24 ͷΠςϨʔλ from byte to bite

Slide 2

Slide 2 text

@nozomuikuta X / GitHub • ιϑτ΢ΣΞΤϯδχΞ • Vue.js ೔ຊϢʔβʔάϧʔϓίΞελοϑ • UnJS ϝϯόʔ • Nuxt / Vite ίϯτϦϏϡʔλ

Slide 3

Slide 3 text

ϩΰืूத Shibuya.go

Slide 4

Slide 4 text

• ΠςϨʔλ͓͞Β͍ • bytes ύοέʔδͷΠςϨʔλ

Slide 5

Slide 5 text

ΠςϨʔλ͓͞Β͍

Slide 6

Slide 6 text

ΠςϨʔλ͓͞Β͍ • Go 1.23 Ͱ௥Ճ͞Εͨ • yield ʹΑͬͯ࿈ଓͨ͠஋ΛίʔϧόοΫؔ਺ʹΘͨؔ͢਺ͷ͜ͱ • ஋͕ͳ͘ͳΔ͔ yield ͕ false Λฦ͢ͱΠςϨʔγϣϯ͕ऴྃ͢Δ

Slide 7

Slide 7 text

ΠςϨʔλ͓͞Β͍ • ͻͱͭͷ஋ΛΘͨ͢: Seq[V any] func(yield func(V) bool) • slices.All() • slices.Values() • slices.Backward() • slices.Sorted() • etc.

Slide 8

Slide 8 text

ΠςϨʔλ͓͞Β͍ • ;ͨͭͷ஋ΛΘͨ͢: Seq2[K, V any] func(yield func(K, V) bool) • maps.All() • maps.Insert() • etc.

Slide 9

Slide 9 text

bytes ύοέʔδͷΠςϨʔλ

Slide 10

Slide 10 text

• bytes.Lines() • bytes.FieldsSeq() • bytes.SplitSeq() • bytes.SplitAfterSeq() • bytes.FieldsFuncSeq() bytes ύοέʔδͷΠςϨʔλ طఆ஋Ͱ෼ׂ / ࣗ༝஋Ͱ෼ׂ

Slide 11

Slide 11 text

func Lines(s []byte) iter.Seq[[]byte] • newlineʢվߦʣͷ௚ޙͰ byte Λ۠ ੾ͬͯฦͯ͘͠ΕΔ • ֤஋͸຤ඌʹվߦ͕͍ͭͯ͘Δ • byte ຤ඌͷվߦͷ༗ແ͸ଚॏ͞Ε Δ bytes ύοέʔδͷΠςϨʔλ

Slide 12

Slide 12 text

func FieldsSeq(s []byte) iter.Seq[[]byte] • unicode.IsSpace()ʢۭനʣʹ߹க͢ Δ෦෼Ͱ byte Λ۠੾ͬͯฦͯ͘͠ ΕΔ • ֤஋͸લޙʹۭനΛ;͘·ͳ͍ bytes ύοέʔδͷΠςϨʔλ

Slide 13

Slide 13 text

func SplitSeq(s, sep []byte) iter.Seq[[]byte] • ೚ҙͷ byte slice Ͱ۠੾ͬͯฦͯ͠ ͘ΕΔ • ֤஋຤ඌʹ۠੾Γ෦෼Λ;͘·ͳ͍ bytes ύοέʔδͷΠςϨʔλ

Slide 14

Slide 14 text

func SplitAfterSeq(s, sep []byte) iter.Seq[[]byte] • ೚ҙͷ byte slice Ͱ۠੾ͬͯฦͯ͠ ͘ΕΔ • ֤஋຤ඌʹ۠੾Γ෦෼Λ;͘Ή bytes ύοέʔδͷΠςϨʔλ

Slide 15

Slide 15 text

• ೚ҙͷؔ਺Ͱ byte Λ۠੾ͬͯฦ͠ ͯ͘ΕΔ • unicode.IsX() ϝιουͳͲͱ૊Έ߹ Θͤͯ࢖͏ • ֤஋͸લޙʹ۠੾Γ෦෼Λ;͘·ͳ ͍ bytes ύοέʔδͷΠςϨʔλ func FieldsFuncSeq(s []byte, f func(rune) bool) iter.Seq[[]byte]

Slide 16

Slide 16 text

·ͱΊ

Slide 17

Slide 17 text

• bytes ύοέʔδʹΠςϨʔλ͕ಋ ೖ͞Εͨ • ʮ۠੾ͬͯϧʔϓʯ͕ΑΓศརʹ

Slide 18

Slide 18 text

ࢀߟจݙ • https://go.dev/doc/go1.24 • https://pkg.go.dev/iter • https://pkg.go.dev/bytes

Slide 19

Slide 19 text

Thank you