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.1k
【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
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
390
CSC305 Lecture 01
javiergs
PRO
1
400
CSC305 Lecture 03
javiergs
PRO
0
230
dynamic!
moro
9
6.5k
非同期jobをtransaction内で 呼ぶなよ!絶対に呼ぶなよ!
alstrocrack
0
520
あなたの知らない「動画広告」の世界 - iOSDC Japan 2025
ukitaka
0
390
猫と暮らすネットワークカメラ生活🐈 ~Vision frameworkでペットを愛でよう~ / iOSDC Japan 2025
yutailang0119
0
220
Go Conference 2025: Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する
takehaya
7
1.6k
Local Peer-to-Peer APIはどのように使われていくのか?
hal_spidernight
2
450
Railsだからできる 例外業務に禍根を残さない 設定設計パターン
ei_ei_eiichi
0
270
ネイティブ製ガントチャートUIを作って学ぶUICollectionViewLayoutの威力
jrsaruo
0
130
GraphQL×Railsアプリのデータベース負荷分散 - 月間3,000万人利用サービスを無停止で
koxya
1
1.1k
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Side Projects
sachag
455
43k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6.1k
Optimizing for Happiness
mojombo
379
70k
Mobile First: as difficult as doing things right
swwweet
224
10k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Documentation Writing (for coders)
carmenintech
75
5k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
2.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
RailsConf 2023
tenderlove
30
1.2k
The Cost Of JavaScript in 2023
addyosmani
53
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()͔จࣈྻͷมʹΑͬͯίϐʔΛߦ͏͜ͱͰղܾ ͢Δ ·ͱΊ