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
390
【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
アーキテクチャの価値
tomo1227
0
27
アーキテクチャとビジネスロジック
tomo1227
0
25
【Go言語】テスト
tomo1227
0
15
【Go言語】クロージャ
tomo1227
0
130
【Go言語】イテレータ
tomo1227
0
17
【Go言語】エラーハンドリング
tomo1227
0
18
AIに淘汰されないようにするには?
tomo1227
0
25
【Go言語】range
tomo1227
0
9
【Go言語】break
tomo1227
0
21
Other Decks in Programming
See All in Programming
subpath importsで始めるモック生活
10tera
0
330
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikumatadokoro
0
290
EMになってからチームの成果を最大化するために取り組んだこと/ Maximize team performance as EM
nashiusagi
0
100
macOS でできる リアルタイム動画像処理
biacco42
9
2.4k
TypeScriptでライブラリとの依存を限定的にする方法
tutinoko
3
720
ローコードSaaSのUXを向上させるためのTypeScript
taro28
1
650
watsonx.ai Dojo #4 生成AIを使ったアプリ開発、応用編
oniak3ibm
PRO
1
200
Remix on Hono on Cloudflare Workers
yusukebe
1
310
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
1.1k
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
260
DevTools extensions で 独自の DevTool を開発する | FlutterKaigi 2024
kokiyoshida
0
130
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
340
Featured
See All Featured
For a Future-Friendly Web
brad_frost
175
9.4k
The Cult of Friendly URLs
andyhume
78
6k
Docker and Python
trallard
40
3.1k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
120
Code Reviewing Like a Champion
maltzj
520
39k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Building Adaptive Systems
keathley
38
2.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
28
2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
380
Making Projects Easy
brettharned
115
5.9k
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()͔จࣈྻͷมʹΑͬͯίϐʔΛߦ͏͜ͱͰղܾ ͢Δ ·ͱΊ