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
2.2k
【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
91
アーキテクチャとビジネスロジック
tomo1227
0
91
【Go言語】テスト
tomo1227
0
52
【Go言語】クロージャ
tomo1227
0
260
【Go言語】イテレータ
tomo1227
0
69
【Go言語】エラーハンドリング
tomo1227
0
58
AIに淘汰されないようにするには?
tomo1227
0
58
【Go言語】range
tomo1227
0
62
【Go言語】break
tomo1227
0
61
Other Decks in Programming
See All in Programming
Web Components で実現する Hotwire とフロントエンドフレームワークの橋渡し / Bridging with Web Components
da1chi
3
1.9k
CSC509 Lecture 06
javiergs
PRO
0
240
Swift Concurrency - 状態監視の罠
objectiveaudio
2
470
WebエンジニアがSwiftをブラウザで動かすプレイグラウンドを作ってみた
ohmori_yusuke
0
170
開発者への寄付をアプリ内課金として実装する時の気の使いどころ
ski
0
350
LLMとPlaywright/reg-suitを活用した jQueryリファクタリングの実際
kinocoboy2
4
670
dynamic!
moro
9
6.7k
クラシルを支える技術と組織
rakutek
0
190
Pythonスレッドとは結局何なのか? CPython実装から見るNoGIL時代の変化
curekoshimizu
5
1.4k
Playwrightはどのようにクロスブラウザをサポートしているのか
yotahada3
7
2.3k
株式会社 Sun terras カンパニーデック
sunterras
0
230
CSC305 Lecture 01
javiergs
PRO
1
400
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
339
57k
A Tale of Four Properties
chriscoyier
160
23k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
610
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
960
The World Runs on Bad Software
bkeepers
PRO
71
11k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
Faster Mobile Websites
deanohume
310
31k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
890
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.5k
Designing for humans not robots
tammielis
254
25k
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()͔จࣈྻͷมʹΑͬͯίϐʔΛߦ͏͜ͱͰղܾ ͢Δ ·ͱΊ