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
1.8k
【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
75
アーキテクチャとビジネスロジック
tomo1227
0
80
【Go言語】テスト
tomo1227
0
46
【Go言語】クロージャ
tomo1227
0
230
【Go言語】イテレータ
tomo1227
0
58
【Go言語】エラーハンドリング
tomo1227
0
52
AIに淘汰されないようにするには?
tomo1227
0
48
【Go言語】range
tomo1227
0
48
【Go言語】break
tomo1227
0
54
Other Decks in Programming
See All in Programming
[Codecon - 2025] Como não odiar seus testes
camilacampos
0
100
TypeScriptでDXを上げろ! Hono編
yusukebe
3
880
Google I/O Extended Incheon 2025 ~ What's new in Android development tools
pluu
1
200
Reactの歴史を振り返る
tutinoko
1
150
マッチングアプリにおけるフリックUIで苦労したこと
yuheiito
0
250
ソフトウェア設計とAI技術の活用
masuda220
PRO
25
6.9k
MCP連携で加速するAI駆動開発/mcp integration accelerates ai-driven-development
bpstudy
0
140
NEWT Backend Evolution
xpromx
1
170
オンコール⼊⾨〜ページャーが鳴る前に、あなたが備えられること〜 / Before The Pager Rings
yktakaha4
2
1.2k
抽象化という思考のツール - 理解と活用 - / Abstraction-as-a-Tool-for-Thinking
shin1x1
1
890
フロントエンドのパフォーマンスチューニング
koukimiura
6
2.3k
Workers を定期実行する方法は一つじゃない
rokuosan
0
130
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
246
12k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Speed Design
sergeychernyshev
32
1k
Documentation Writing (for coders)
carmenintech
72
4.9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Visualization
eitanlees
146
16k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
We Have a Design System, Now What?
morganepeng
53
7.7k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
860
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()͔จࣈྻͷมʹΑͬͯίϐʔΛߦ͏͜ͱͰղܾ ͢Δ ·ͱΊ