Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【Go言語】文字列
Search
Tomoki Ota
July 25, 2024
Programming
0
92
【Go言語】文字列
Go言語の文字列について、解説しています。
【Qiita】
【Go言語】文字列とrune
【Go言語】Trim関数
【Go言語】stringsパッケージとbytesパッケージ
【Go言語】部分文字列
Tomoki Ota
July 25, 2024
Tweet
Share
More Decks by Tomoki Ota
See All by Tomoki Ota
【Go言語】イテレータ
tomo1227
0
5
【Go言語】エラーハンドリング
tomo1227
0
4
AIに淘汰されないようにするには?
tomo1227
0
11
range.pdf
tomo1227
0
4
【Go言語】break
tomo1227
0
5
【Go言語】反復処理
tomo1227
0
3
【Go言語】map
tomo1227
0
16
【Go言語】値の比較
tomo1227
0
16
【Go言語】値レシーバ v.s. ポインタレシーバ
tomo1227
0
15
Other Decks in Programming
See All in Programming
仮想ファイルシステムを導入して開発環境のストレージ課題を解消する
segadevtech
2
460
LangChainの現在とv0.3にむけて
os1ma
4
790
LangGraphでのHuman-in-the-Loopの実装
os1ma
3
930
労務ドメインを快適に開発する方法 / How to Comfortably Develop in the Labor Domain
yuki21
1
250
マルチモジュールにおけるテスト最適化
fxwx23
0
190
2024 컴포즈 정원사
jisungbin
0
150
Jakarta EE meets AI
ivargrimstad
0
200
長期運用プロダクトの開発速度を維持し続けるためのリファクタリング実践例
wataruss
8
2.6k
Swiftで高速フーリエ変換してオーディオビジュアライザーを作る / iOSDC Japan 2024 Day1 Track D
kyome22
3
510
私のEbitengineの第一歩
qt_luigi
0
440
Swift Concurrencyとレースコンディション
objectiveaudio
1
400
Our Websites Need a Lifestyle Change, Not a Diet
ryantownsend
0
110
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
242
11k
Building Your Own Lightsaber
phodgson
101
6k
Code Reviewing Like a Champion
maltzj
518
39k
Producing Creativity
orderedlist
PRO
340
39k
Scaling GitHub
holman
458
140k
Making Projects Easy
brettharned
113
5.8k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Designing with Data
zakiwarfel
98
5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
58k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Large-scale JavaScript Application Architecture
addyosmani
508
110k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
166
48k
Transcript
Tomoki Ota ʲGOݴޠʳจࣈྻ
ΞδΣϯμ ᶃจࣈྻͱʁ ᶄจࣈηοτͱʁ ᶅΤϯίʔσΟϯάͱʁ ᶆίʔυϙΠϯτͱʁ ᶇruneͱʁ ᶈจࣈ ᶉTrimؔ ᶊจࣈྻͷߏ ᶋจࣈྻ
v.s. όΠτ ᶌจࣈྻͷෆมੑ ᶍ෦จࣈྻ
จࣈྻͱʁ
ΠϛϡʔλϒϧͳόΠτྻͷϙΠϯλ ͦͷόΠτྻͷόΠτͷ૯ จࣈྻͱʁ Goͷจࣈྻ͜ΕΒΛอ࣋͢ΔΠϛϡʔλϒϧͳσʔλߏ
จࣈηοτͱʁ
จࣈηοτͱʁ จࣈͷू߹
จࣈηοτͱʁ Unicodeͷจࣈηοτ → ݸͷจࣈ͕͋Δ 221
ΤϯίʔσΟϯάͱʁ
ΤϯίʔσΟϯάͱʁ จࣈͷϦετΛ2ਐͰ༁ͨ͠ͷ
ΤϯίʔσΟϯάͱʁ UTF-8 : શͯͷUnicodeจࣈΛՄมͳόΠτ(1ʙ4όΠτ)Ͱ ΤϯίʔσΟϯάͰ͖ΔΤϯίʔσΟϯάن֨
ίʔυϙΠϯτͱʁ
ίʔυϙΠϯτͱʁ நจࣈΛදݱ͢ΔͨΊʹ ׂΓͯΒΕͨ൪߸ͷ͜ͱɻ ූ߸Ґஔɺූ߸ͱݺΕΔ
ίʔυϙΠϯτͱʁ ͋ΒΏΔจࣈʹׂΓৼΒΕͨ൪߸
ίʔυϙΠϯτͱʁ UnicodeίʔυϙΠϯτͷू߹ମ
ίʔυϙΠϯτͷྫ
ίʔυϙΠϯτͷྫ U+8089 Unicode
ίʔυϙΠϯτͷྫ 0xE8, 0x82, 0x89 UTF-8
runeͱʁ
runeͱʁ UnicodeͷίʔυϙΠϯτ
runeͱʁ UnicodeͷίʔυϙΠϯτ : 21Ϗοτ
runeͱʁ int32ͷΤΠϦΞε
runeͱʁ
จࣈྻ
จࣈྻϦςϥϧ GoͷจࣈྻৗʹUTF-8Ͱͳ͍
จࣈྻϦςϥϧ
จࣈྻϦςϥϧ GoͷιʔείʔυɺશͯUTF-8ͰΤϯίʔυ͞ΕΔ
จࣈྻϦςϥϧ จࣈྻࣗମҙͷόΠτྻͰ͋Γɺඞͣ͠UTF-8Ͱ͋ΔΘ͚Ͱͳ͍ɻ ϑΝΠϧ͔ΒಡΈࠐΉ : จࣈϦςϥϧͰॳظԽ͞Ε͍ͯͳ͍
จࣈྻϦςϥϧ golang.org/x : ඪ४ϥΠϒϥϦʹର͢Δ֦ுΛఏڙ͢ΔϦϙδτϦ UTF-16ͱUTF-32Λѻ͏ͨͷύοέʔδΛؚΉ
จࣈྻϦςϥϧ 1จࣈৗʹ1όΠτʹΤϯίʔυ͞ΕΔΘ͚Ͱͳ͍
จࣈྻϦςϥϧ
จࣈྻϦςϥϧ 0xE8, 0x82, 0x89
จࣈྻϦςϥϧ
จࣈྻϦςϥϧ
จࣈྻϦςϥϧ ಛघจࣈêΛUTF-8ʹΤϯίʔυ͢Δͱ c3 aaʹͳΔ ͪͳΈʹɺc3Ã
จࣈྻΛεϥΠεʹ͢Δํ๏
จࣈྻΛεϥΠεʹ͢Δํ๏
จࣈྻΛεϥΠεʹ͢Δํ๏ ࣮ߦ࣌ͷΦʔόʔϔου͕ൃੜ͢Δɻ จࣈྻΛruneͷεϥΠεʹม͢ΔʹɺՃͷεϥΠε ΛׂΓͯɺbyteΛruneʹม͠ͳ͚ΕͳΒͳ͍ɻ ࣌ؒܭࢉྔO(n) → Ͱ͖ΔݶΓ࠷ॳͷղܾ๏Ͱߦ͏ํ͕ྑ͍ɻ
จࣈྻʹindexͰΞΫηε͢Δ
Trimؔ
Trimؔͱʁ stringsύοέʔδͷTrimLeftɺTrimPre f ixͳͲͷ TrimXXXͱͳΔؔͷ͜ͱɻ
TrimRight ඌͷจࣈ͕ɺୈೋҾʹࢦఆͨ͠runeͷू߹ʹ ͯ·ͬͨΒɺͦͷจࣈΛআ͢Δ
TrimRight
༩͑ΒΕͨඌࣙͷจࣈྻΛ ඌ͔ΒऔΓআ͍ͨΛฦ͢ TrimSuf f ix
TrimSuf f ix
TrimLeft
TrimPre f ix
Trim
TrimFunc
TrimLeftFunc
TrimRightFunc
TrimSpace
จࣈྻͷ࿈݁
γϯϓϧͳ࿈݁(+=Ͱ࿈݁͢Δ)
γϯϓϧͳ࿈݁(+=Ͱ࿈݁͢Δ)
strings.BuilderΛ༻͢Δํ๏(ࣄ લׂΓͯͳ͠)
strings.BuilderΛ༻͢Δํ๏(ࣄલׂΓͯͳ͠)
strings.BuilderΛ༻͢Δํ๏(ࣄ લׂΓͯ͋Γ)
strings.BuilderΛ༻͢Δํ๏(ࣄલׂΓͯ͋Γ)
݁ہͲΕ͕͍͍ͷ͔
ϕϯνϚʔΫςετͰɺ̏ͭͷํ๏͕Ұ൪͍ 2,3ݸͷจࣈྻΛ࿈݁ˠγϯϓϧͳ࿈݁ 5ݸҎ্ͷ࿈݁ˠ strings.Builder
จࣈྻ v.s. όΠτ
GOͰ΄ͱΜͲͷI/Oɺจ ࣈྻͰͳ͘ɺόΠτΛ͏
จࣈྻ v.s. όΠτ
จࣈྻ v.s. όΠτ
จࣈྻ v.s. όΠτ
จࣈྻͷෆมੑ
จࣈྻΠϛϡʔλϒϧ
จࣈྻͷෆมੑ
෦จࣈྻ
จࣈྻΠϛϡʔλϒϧ
෦จࣈྻ
෦จࣈྻ
෦จࣈྻ
෦จࣈྻ ϩάϝοηʔδΛจࣈྻͱͯ͠ड͚ औΔɻ࠷৽ͷnݸͷUUIDͷΩϟο γϡΛอଘ͢ΔɻϝϞϦʹอଘ͢Δ ϩά࠷ॳʹ36จࣈͷUUIDͰ ϑΥʔϚοτ͞Εͯɺͦͷޙʹϝο ηʔδ͕ࣗଓ͘ɻ
෦จࣈྻ UUIDΛऔΓग़͢ࡍʹlog[:36]Ͱ෦ จࣈྻԋࢉΛ༻͍ͯ͠Δ
෦จࣈྻ UUIDΛऔΓग़͢ࡍʹlog[:36]Ͱ෦ จࣈྻԋࢉΛ༻͍ͯ͠Δ log[:36]ಉ͡جఈྻΛࢀর͢Δ จࣈྻΛ৽ن࡞͢ΔͷͰɺϝϞϦ ʹ֨ೲ͞ΕΔuuid36byte͚ͩͰ ͳ͘ɺݩͷϩάจࣈྻͷόΠτʹ ͳΔ
ղܾࡦ1 ෦จࣈྻΛ[]byteʹม͠ɺจࣈྻʹม͢Δ
ղܾࡦ2 strings.CloneΛ͏(v1.18Ҏ্)
෦จࣈྻͰɺεϥΠεͷൣғόΠτʹج͍͓ͮͯΓɺruneͷͰͳ͍ ෦จࣈྻಉ͡جఈྻΛڞ༗͢ΔͷͰɺϝϞϦϦʔΫʹͳΔՄೳੑ͕͋Δ ϝϞϦϦʔΫstrings.Clone()͔จࣈྻͷมʹΑͬͯίϐʔΛߦ͏͜ͱͰղܾ ͢Δ ·ͱΊ