Slide 1

Slide 1 text

Tomoki Ota ʲGOݴޠʳจࣈྻ

Slide 2

Slide 2 text

ΞδΣϯμ ᶃจࣈྻͱ͸ʁ ᶄจࣈηοτͱ͸ʁ ᶅΤϯίʔσΟϯάͱ͸ʁ ᶆίʔυϙΠϯτͱ͸ʁ ᶇruneͱ͸ʁ ᶈจࣈ ᶉTrimؔ਺ ᶊจࣈྻͷߏ଄ ᶋจࣈྻ v.s. όΠτ ᶌจࣈྻͷෆมੑ ᶍ෦෼จࣈྻ

Slide 3

Slide 3 text

จࣈྻͱ͸ʁ

Slide 4

Slide 4 text

ΠϛϡʔλϒϧͳόΠτྻ΁ͷϙΠϯλ ͦͷόΠτྻ಺ͷόΠτͷ૯਺ จࣈྻͱ͸ʁ Goͷจࣈྻ͸͜ΕΒΛอ࣋͢ΔΠϛϡʔλϒϧͳσʔλߏ଄

Slide 5

Slide 5 text

จࣈηοτͱ͸ʁ

Slide 6

Slide 6 text

จࣈηοτͱ͸ʁ จࣈͷू߹

Slide 7

Slide 7 text

จࣈηοτͱ͸ʁ Unicodeͷจࣈηοτ → ݸͷจࣈ͕͋Δ 221

Slide 8

Slide 8 text

ΤϯίʔσΟϯάͱ͸ʁ

Slide 9

Slide 9 text

ΤϯίʔσΟϯάͱ͸ʁ จࣈͷϦετΛ2ਐ਺Ͱ຋༁ͨ͠΋ͷ

Slide 10

Slide 10 text

ΤϯίʔσΟϯάͱ͸ʁ UTF-8 : શͯͷUnicodeจࣈΛՄมͳόΠτ਺(1ʙ4όΠτ)Ͱ ΤϯίʔσΟϯάͰ͖ΔΤϯίʔσΟϯάن֨

Slide 11

Slide 11 text

ίʔυϙΠϯτͱ͸ʁ

Slide 12

Slide 12 text

ίʔυϙΠϯτͱ͸ʁ ந৅จࣈΛදݱ͢ΔͨΊʹ ׂΓ౰ͯΒΕͨ൪߸ͷ͜ͱɻ ූ߸Ґஔɺූ߸఺ͱ΋ݺ͹ΕΔ

Slide 13

Slide 13 text

ίʔυϙΠϯτͱ͸ʁ ͋ΒΏΔจࣈʹׂΓৼΒΕͨ൪߸

Slide 14

Slide 14 text

ίʔυϙΠϯτͱ͸ʁ Unicode͸ίʔυϙΠϯτͷू߹ମ

Slide 15

Slide 15 text

ίʔυϙΠϯτͷྫ ೑

Slide 16

Slide 16 text

ίʔυϙΠϯτͷྫ U+8089 Unicode

Slide 17

Slide 17 text

ίʔυϙΠϯτͷྫ 0xE8, 0x82, 0x89 UTF-8

Slide 18

Slide 18 text

runeͱ͸ʁ

Slide 19

Slide 19 text

runeͱ͸ʁ UnicodeͷίʔυϙΠϯτ

Slide 20

Slide 20 text

runeͱ͸ʁ UnicodeͷίʔυϙΠϯτ : 21Ϗοτ

Slide 21

Slide 21 text

runeͱ͸ʁ int32ͷΤΠϦΞε

Slide 22

Slide 22 text

runeͱ͸ʁ

Slide 23

Slide 23 text

จࣈྻ

Slide 24

Slide 24 text

จࣈྻϦςϥϧ Goͷจࣈྻ͸ৗʹUTF-8Ͱ͸ͳ͍

Slide 25

Slide 25 text

จࣈྻϦςϥϧ

Slide 26

Slide 26 text

จࣈྻϦςϥϧ Goͷιʔείʔυ͸ɺશͯUTF-8ͰΤϯίʔυ͞ΕΔ

Slide 27

Slide 27 text

จࣈྻϦςϥϧ จࣈྻࣗମ͸೚ҙͷόΠτྻͰ͋Γɺඞͣ͠΋UTF-8Ͱ͋ΔΘ͚Ͱ͸ͳ͍ɻ ϑΝΠϧ͔ΒಡΈࠐΉ౳ : จࣈϦςϥϧͰॳظԽ͞Ε͍ͯͳ͍

Slide 28

Slide 28 text

จࣈྻϦςϥϧ golang.org/x : ඪ४ϥΠϒϥϦʹର͢Δ֦ுΛఏڙ͢ΔϦϙδτϦ UTF-16ͱUTF-32Λѻ͏ͨͷύοέʔδΛؚΉ

Slide 29

Slide 29 text

จࣈྻϦςϥϧ 1จࣈ͸ৗʹ1όΠτʹΤϯίʔυ͞ΕΔΘ͚Ͱ͸ͳ͍

Slide 30

Slide 30 text

จࣈྻϦςϥϧ

Slide 31

Slide 31 text

จࣈྻϦςϥϧ 0xE8, 0x82, 0x89

Slide 32

Slide 32 text

จࣈྻϦςϥϧ

Slide 33

Slide 33 text

จࣈྻϦςϥϧ

Slide 34

Slide 34 text

จࣈྻϦςϥϧ ಛघจࣈêΛUTF-8ʹΤϯίʔυ͢Δͱ c3 aaʹͳΔ ͪͳΈʹɺc3͸Ã

Slide 35

Slide 35 text

จࣈྻΛεϥΠεʹ͢Δํ๏

Slide 36

Slide 36 text

จࣈྻΛεϥΠεʹ͢Δํ๏

Slide 37

Slide 37 text

จࣈྻΛεϥΠεʹ͢Δํ๏ ࣮ߦ࣌ͷΦʔόʔϔου͕ൃੜ͢Δɻ จࣈྻΛruneͷεϥΠεʹม׵͢Δʹ͸ɺ௥ՃͷεϥΠε ΛׂΓ౰ͯɺbyteΛruneʹม׵͠ͳ͚Ε͹ͳΒͳ͍ɻ ࣌ؒܭࢉྔ͸O(n) → Ͱ͖ΔݶΓ࠷ॳͷղܾ๏Ͱߦ͏ํ͕ྑ͍ɻ

Slide 38

Slide 38 text

จࣈྻʹindexͰΞΫηε͢Δ

Slide 39

Slide 39 text

Trimؔ਺

Slide 40

Slide 40 text

Trimؔ਺ͱ͸ʁ stringsύοέʔδͷTrimLeftɺTrimPre f ixͳͲͷ TrimXXXͱͳΔؔ਺ͷ͜ͱɻ

Slide 41

Slide 41 text

TrimRight ຤ඌͷจࣈ͕ɺୈೋҾ਺ʹࢦఆͨ͠runeͷू߹ʹ ౰ͯ͸·ͬͨΒɺͦͷจࣈΛ࡟আ͢Δ

Slide 42

Slide 42 text

TrimRight

Slide 43

Slide 43 text

༩͑ΒΕͨ઀ඌࣙͷจࣈྻΛ ຤ඌ͔ΒऔΓআ͍ͨ஋Λฦ͢ TrimSuf f ix

Slide 44

Slide 44 text

TrimSuf f ix

Slide 45

Slide 45 text

TrimLeft

Slide 46

Slide 46 text

TrimPre f ix

Slide 47

Slide 47 text

Trim

Slide 48

Slide 48 text

TrimFunc

Slide 49

Slide 49 text

TrimLeftFunc

Slide 50

Slide 50 text

TrimRightFunc

Slide 51

Slide 51 text

TrimSpace

Slide 52

Slide 52 text

จࣈྻͷ࿈݁

Slide 53

Slide 53 text

γϯϓϧͳ࿈݁(+=Ͱ࿈݁͢Δ)

Slide 54

Slide 54 text

γϯϓϧͳ࿈݁(+=Ͱ࿈݁͢Δ)

Slide 55

Slide 55 text

strings.BuilderΛ࢖༻͢Δํ๏(ࣄ લׂΓ౰ͯͳ͠)

Slide 56

Slide 56 text

strings.BuilderΛ࢖༻͢Δํ๏(ࣄલׂΓ౰ͯͳ͠)

Slide 57

Slide 57 text

strings.BuilderΛ࢖༻͢Δํ๏(ࣄ લׂΓ౰ͯ͋Γ)

Slide 58

Slide 58 text

strings.BuilderΛ࢖༻͢Δํ๏(ࣄલׂΓ౰ͯ͋Γ)

Slide 59

Slide 59 text

݁ہͲΕ͕͍͍ͷ͔

Slide 60

Slide 60 text

ϕϯνϚʔΫςετͰ͸ɺ̏ͭ໨ͷํ๏͕Ұ൪଎͍ 2,3ݸͷจࣈྻΛ࿈݁ˠγϯϓϧͳ࿈݁ 5ݸҎ্ͷ࿈݁ˠ strings.Builder

Slide 61

Slide 61 text

จࣈྻ v.s. όΠτ

Slide 62

Slide 62 text

GOͰ͸΄ͱΜͲͷI/O͸ɺจ ࣈྻͰ͸ͳ͘ɺόΠτΛ࢖͏

Slide 63

Slide 63 text

จࣈྻ v.s. όΠτ

Slide 64

Slide 64 text

จࣈྻ v.s. όΠτ

Slide 65

Slide 65 text

จࣈྻ v.s. όΠτ

Slide 66

Slide 66 text

จࣈྻͷෆมੑ

Slide 67

Slide 67 text

จࣈྻ͸Πϛϡʔλϒϧ

Slide 68

Slide 68 text

จࣈྻͷෆมੑ

Slide 69

Slide 69 text

෦෼จࣈྻ

Slide 70

Slide 70 text

จࣈྻ͸Πϛϡʔλϒϧ

Slide 71

Slide 71 text

෦෼จࣈྻ

Slide 72

Slide 72 text

෦෼จࣈྻ

Slide 73

Slide 73 text

෦෼จࣈྻ

Slide 74

Slide 74 text

෦෼จࣈྻ ϩάϝοηʔδΛจࣈྻͱͯ͠ड͚ औΔɻ࠷৽ͷnݸͷUUIDͷΩϟο γϡΛอଘ͢ΔɻϝϞϦʹอଘ͢Δ ϩά͸࠷ॳʹ36จࣈͷUUIDͰ ϑΥʔϚοτ͞Εͯɺͦͷޙʹϝο ηʔδࣗ਎͕ଓ͘ɻ

Slide 75

Slide 75 text

෦෼จࣈྻ UUIDΛऔΓग़͢ࡍʹlog[:36]Ͱ෦෼ จࣈྻԋࢉΛ࢖༻͍ͯ͠Δ

Slide 76

Slide 76 text

෦෼จࣈྻ UUIDΛऔΓग़͢ࡍʹlog[:36]Ͱ෦෼ จࣈྻԋࢉΛ࢖༻͍ͯ͠Δ log[:36]͸ಉ͡جఈ഑ྻΛࢀর͢Δ จࣈྻΛ৽ن࡞੒͢ΔͷͰɺϝϞϦ ʹ֨ೲ͞ΕΔuuid͸36byte͚ͩͰ͸ ͳ͘ɺݩͷϩάจࣈྻͷόΠτ਺ʹ ͳΔ

Slide 77

Slide 77 text

ղܾࡦ1 ෦෼จࣈྻΛ[]byteʹม׵͠ɺจࣈྻʹม׵͢Δ

Slide 78

Slide 78 text

ղܾࡦ2 strings.CloneΛ࢖͏(v1.18Ҏ্)

Slide 79

Slide 79 text

෦෼จࣈྻͰ͸ɺεϥΠεͷൣғ͸όΠτ਺ʹج͍͓ͮͯΓɺruneͷ਺Ͱ͸ͳ͍ ෦෼จࣈྻ͸ಉ͡جఈ഑ྻΛڞ༗͢ΔͷͰɺϝϞϦϦʔΫʹͳΔՄೳੑ͕͋Δ ϝϞϦϦʔΫ͸strings.Clone()͔จࣈྻͷม׵ʹΑͬͯίϐʔΛߦ͏͜ͱͰղܾ ͢Δ ·ͱΊ