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
go100tips6-10.pdf
Search
Tomoki Ota
June 14, 2024
Programming
57k
0
Share
go100tips6-10.pdf
Go言語100Tips No.6~10をまとめました。
Tomoki Ota
June 14, 2024
More Decks by Tomoki Ota
See All by Tomoki Ota
アーキテクチャの価値
tomo1227
0
120
アーキテクチャとビジネスロジック
tomo1227
0
120
【Go言語】テスト
tomo1227
0
87
【Go言語】クロージャ
tomo1227
0
320
【Go言語】イテレータ
tomo1227
0
110
【Go言語】エラーハンドリング
tomo1227
0
90
AIに淘汰されないようにするには?
tomo1227
0
90
【Go言語】range
tomo1227
0
100
【Go言語】break
tomo1227
0
91
Other Decks in Programming
See All in Programming
権限チェックの一貫性を型で守る TypeScript による多層防御
mnch
4
1.1k
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.4k
LLM Plugin for Node-REDの利用方法と開発について
404background
0
160
今さら聞けないCancellationToken
htkym
0
220
TypeScriptだけでAIエージェントを作る フロント・エージェント・インフラのフルスタック実践
har1101
6
1.3k
AI時代のUIはどこへ行く?その2!
yusukebe
19
6.5k
プラグインで拡張される Context をtype-safe にする難しさと設計判断
kazupon
2
560
net-httpのHTTP/2対応について
naruse
0
430
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
130
関係性から理解する"同一性"の型用語たち
pvcresin
2
630
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
1
690
Migrations : C'est une question d'hygiène !
vinceamstoutz
0
3.2k
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
720
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
380
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
200
Embracing the Ebb and Flow
colly
88
5.1k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
310
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.8k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
460
Everyday Curiosity
cassininazir
0
220
YesSQL, Process and Tooling at Scale
rocio
174
15k
Rails Girls Zürich Keynote
gr2m
96
14k
Transcript
(Pݴޠ5*14 Ћ 5PNPLJ0UB /Pd/P 1
5*1 ੜ࢈ऀଆͷΠϯλʔϑΣΠε 2
ΠϯλʔϑΣΠεͲ͜ʹ͋Δ͖͔ w ੜ࢈ऀଆ QSPEVDFSTJEF ۩ମతͳ࣮͕ॻ͔Εͨύοέʔδଆ w ফඅऀଆ DPOTVNFSTJEF ΘΕΔ֎෦ύοέʔδଆ 3
ੜ࢈ऀଆͷΠϯλʔϑΣΠε 4 +BWB$Ͱɺੜ࢈ऀଆʹ ΠϯλʔϑΣΠεΛॻ͘͜ͱ͕ଟ͍ɻ
ੜ࢈ऀଆͷΠϯλʔϑΣΠε 5 (PͰੜ࢈ऀଆʹΠϯλʔϑΣΠεΛ ॻ͘ํ͕·͍͠ɻ ΠϯλʔϑΣΠεΛੜ࢈ऀଆͰ ެ։ͯ͠͠·͏ͱফඅऀଆͷৼΔ͍͕ ੍ݶ͞Εͯ͠·͏ɻ
ੜ࢈ऀଆͷΠϯλʔϑΣΠε 6 (PͰKBWBͷΑ͏ʹ JNQMFNFOUTΛ໌ࣔ͠ͳ͍ͷͰ ґଘ͕ؔͳ͍
ফඅऀଆʹॻ͘ͱʁ 7 ফඅऀͱґଘؔʹ͓͚Δґଘઌ
ফඅऀଆʹॻ͘ͱʁ 8 ফඅऀ ੜ࢈ऀ
ফඅऀଆʹॻ͘ͱʁ 9 ফඅऀ ੜ࢈ऀ ґଘؔٯసͷ๏ଇΛద༻ͤͨ͞ґଘؔΛߟ͑Δͱ "ଆͷύοέʔδʹ#ͷJOUFSGBDFΛॻ͍ͨํ͕Θ͔Γ͍͢
ੜ࢈ऀଆͱফඅऀଆ 10 ফඅऀ ੜ࢈ऀ ফඅऀଆ ੜ࢈ऀଆ ֎෦ύοέʔδΛ͏ଆ ֎෦ύοέʔδ IBOEMFS VTFDBTF
VTFDBTF SFQPTJUPSZ
3FQPTJUPSZͷ 11 ͜ΕΠϯλʔϑΣΠεͷݪଇʹ͢Δ
ΠϯλʔϑΣΠεͷݪଇ *41 *OUFSGBDF4FHSFHBUJPO1SJODJQMF 12 ιϑτΣΞΛઃܭ͢Δࡍʹ ͍ͬͯͳ͍ͷͷґଘΛճආ͖ͩ͢ͱ͍͏ݪଇ
શ࠶ར༻ͷݪଇ $31 13 ίϯϙʔωϯτͷϢʔβʹରͯ͠ ࣮ࡍʹΘͳ͍ͷͷґଘΛڧཁ͍͚ͯ͠ͳ͍ Ұॹʹ༻͍ΒΕΔ͜ͱ͕ଟ͍ΫϥεϞδϡʔϧಉ͡ίϯϙʔωϯτʹ·ͱΊΔɻ ͍ͬͯͳ͍ΫϥεΛ࣋ͭίϯϙʔωϯτʹґଘ͠ͳ͍Α͏ʹ͢Δɻ
શ࠶ར༻ͷݪଇ $31 14 ίϯϙʔωϯτͷϢʔβʹରͯ͠ ࣮ࡍʹΘͳ͍ͷͷґଘΛڧཁ͍͚ͯ͠ͳ͍ Ұॹʹ༻͍ΒΕΔ͜ͱ͕ଟ͍ΫϥεϞδϡʔϧಉ͡ίϯϙʔωϯτʹ·ͱΊΔɻ ͍ͬͯͳ͍ΫϥεΛ࣋ͭίϯϙʔωϯτʹґଘ͠ͳ͍Α͏ʹ͢Δɻ
3FQPTJUPSZͷ 15 ͜ΕΠϯλʔϑΣΠεͷݪଇʹ͢Δ
3FQPTJUPSZͷ 16 https://go.dev/play/p/hfMn1sv8IGx 6TFS3FQPTJUPSZʹ ෆඞཁͳͷ͕ͨ͘͞Μ͋Δ
17 ෆཁͳͷʹґଘ͠ͳ͍ʂ
5*1 ΠϯλʔϑΣΠεΛฦ͢ 18
ΠϯλʔϑΣΠεϑΝΫτϦ ࠶ܝ ΠϯλʔϑΣΠεΛฦ͢ํ๏5JQͰઆ໌ͨ͠ɻ ϙΠϯλΛฦ͢ͷ͕׳ྫత 19
ΠϯλʔϑΣΠεϑΝΫτϦ ࠶ܝ ΠϯλʔϑΣΠεΛฦ͢ํ๏5JQͰઆ໌ͨ͠ɻ ϙΠϯλΛฦ͢ͷ͕׳ྫత 20
ΠϯλʔϑΣΠεΛฦ͢ 21 ΠϯλʔϑΣΠεΛฦ͢͜ͱ ੜ࢈ऀଆͰΔ͜ͱ͋·Γ·͘͠ͳ͍ ˠJOUFSGBDFΛެ։ͨ͠߹ͷɻ ҰϢʔβʹఏڙͨ͠ΠϯλϑΣʔεΛޙ͔Βมߋ ͢ΔͱطଘͷϢʔβͷίʔυ͕յΕͯ͠·͏ɻ
ΠϯλʔϑΣΠεΛฦ͢
ΠϯλʔϑΣΠεΛฦ͢ϝϦοτ 23 ۀͰෳਓͰ։ൃ͢Δ߹ɺ୭͔ ͕ΠϯλϑΣʔεʹϝιουΛՃ ͨ͠ࡍʹɺͦͷΠϯλϑΣʔεΛ࣮ ͍ͯ͠ͳ͍TUSVDUΛίϯύΠϧΤ ϥʔʹͰ͖Δ https://go.dev/play/p/XeKfOtLYzji
TUSVDUΛฦ͢ 24 TUSVDUɺTUSVDUͷϙΠϯλΛ ฦ͢ͱɺϝιουΛՃͯ͠ ϢʔβͷίʔυյΕͳ͍ https://go.dev/play/p/SyXc7O9fIY4
ΠϯλʔϑΣΠεΛฦ͢σϝϦοτ 25 w ελΠϧ͕+BWBʹΑͬͯ͠·͏Մೳੑ w JOUFSGBDFͷํ͕TUSVDUΑΓϝϞϦΛ͏
ΠϯλʔϑΣΠεͷ͓·͡ͳ͍ 26 (PͷΠϯλʔϑΣΠε+BWBͷΑ͏ʹɺJNQMFNFOUT Λ໌ࣔ͠ͳ͍ɻ ҎԼͷ͓·͡ͳ͍Λॻ͘͜ͱͰಉ༷ͷറΓ͕Մೳɻ
ΠϯλʔϑΣΠεͷ͓·͡ͳ͍ ͓·͡ͳ͍Λ͚ͭΔͱɺstruct͕interfaceͷৼΔ͍ Λຬͨ͞ͳ͍ͱ͖ʹɺӈͷΑ͏ʹίϯύΠϧΤϥʔʹ ͳΔɻ https://go.dev/play/p/XQOUPM481UF interfaceΛฦ͢߹ಛʹҙຯ͕ͳ͍
ΠϯλʔϑΣΠεͷ͓·͡ͳ͍ structΛฦ͢߹ɺ ͓·͡ͳ͍Λ͚ͭΔ͜ͱͰ interfaceͷৼΔ͍Λຬͨ͞ͳ͍ͱ͖ʹɺίϯύΠϧ ΤϥʔʹͰ͖Δɻ͓·͡ͳ͍͕ͳ͍ͱɺΤϥʔʹͳΒ ͳ͍ɻ https://go.dev/play/p/yeoIy9tt9MY
݁ہͲͬͪΛฦ͖͔͢ interfaceΛฦ͢ͱӈਤͷΑ͏ʹ ґଘ͕ൃੜ͢ΔͷͰɺॊೈ͞ΛٻΊΔ ͷͰ͋ΕɺstructΛฦ͢ํ͕͍͍
5*1 BOZԿ͑ͳ͍ 30
BOZͱ ۭΠϯλʔϑΣΠεJOUFSGBDF\^ͷΤΠϦΞε
BOZͱ ͲΜͳܕͰอ࣋Ͱ͖Δ ˠաͳҰൠԽ ɹ੩తܕ͚ݴޠͷར͕ࣦΘΕΔ
BOZͱ ϝιουͷγάχνϟͰ͖Δ͚ͩ໌ࣔతʹ͢Δ BOZԿͷใ࣋ͨͳ͍ͷͰ جຊతʹΘͳ͍
BOZΛ͏͖ͱ͖ ϚʔγϟϧؔͳͲ͋ΒΏΔܕΛ ड͚औͬͨΓฦͨ͠Γ͢Δඞཁ͕͋Δͱ͖
BOZΛ͏͖ͱ͖ https://pkg.go.dev/encoding/json#Marshal encoding/jsonͷMarshal
BOZΛ͏͖ͱ͖ database/sqlͷQueryContext https://pkg.go.dev/database/sql#DB.QueryContext SELECT * FROM FOO WHERE id =
?
5*1 δΣωϦΫε 37
δΣωϦΫεΛ༻͠ͳ͍ྫ ࠨͷίʔυmapܕ͔ΒΩʔΛશͯग़ྗ͢Δɻ Go Plagyround
δΣωϦΫεΛ༻͠ͳ͍ྫ NͷΩʔͱ͕ଞͷܕͰ͋ͬͨ߹ʹ ಈ͔ͳ͘ͳΔɻ ࠨN͕NBQ<JOU>TUSJOHʹͳͬͨͷͰ ίϯύΠϧΤϥʔ
BOZͰ࣮ͨ͠ྫ HFU,FZTɺBOZΛड͚ͱΓɺBOZΛฦ͢ɻ Go Playground
BOZͰ࣮ͨ͠ྫ HFU,FZTɺBOZΛड͚ͱΓɺBOZΛฦ͢ɻ (Pͷ੩తܕ͚ͷར͕ࣦΘΕΔ ܁Γฦ͠ͷίʔυ͕૿͑ΔՄೳੑ ˠ%3:ݪଇʹ͢Δ
DPNQBSBUJWFͰ࣮ͨ͠ྫ ΠϯλʔϑΣΠεಉ༷BOZʹΑΔແବͳநԽආ͚Δ͖ NBQͰɺWBSNNBQ<<>CZUF>JOUͷΑ͏ʹ LFZʹεϥΠεΛऔΔ͜ͱͰ͖ͳ͍ɻ
DPNQBSBUJWFͰ࣮ͨ͠ྫ 5DPNQBSBCMFͱɺΈࠐΈͷΠϯλʔϑΣΠεɻ 5DPNQBSBCMFͰൺֱՄೳͳͷΈҾʹड͚औΔ͜ͱ͕ՄೳʹͳΔɻ
DPNQBSBUJWFͰ࣮ͨ͠ྫ BOZܕͷΘΓʹDPNQBSBCMFΛ༻͍Δ https://go.dev/play/p/ENyS1GKu3IU
ಠࣗͷܕ੍Λఆٛ͢Δ https://go.dev/play/p/VHKfcvYQNua VOJPOTΛ༻͍Δͱ ΠϯλʔϑΣΠεͰಠࣗͷܕ੍Λ ఆٛ͢Δ͜ͱ͕Ͱ͖Δ
VOJPOTͱ ෳͷܕΛड͚औΕΔΑ͏ʹͰ͖Δ
ಠࣗͷܕ੍Λఆٛ͢Δ VOJPOTΛؚΉΠϯλϑΣʔεܕ੍Ͱ͔͑͠ͳ͍ɻ WBSYDVTUPN$POTUSBJOUͷΑ͏ʹͰ͖ͳ͍ɻ
δΣωϦΫεͷҙ ϝιουͰ༻Ͱ͖ͳ͍ɻ ؔՄೳ
δΣωϦΫεͷҙ TUSVDUͰ༻Ͱ͖Δɻ
δΣωϦΫεͷҙ ࠨɺಠࣗͷܕ੍ΛTUSVDUʹ࣋ͨͤͨྫ (P1MBZHPSVOE
δΣωϦΫεͷҙ JOUFSGBDFʹTUSDVUΛFNCFEͰ͖Δ ͔͠͠ɺϑΟʔϧυʹΞΫηεͰ͖ͳ͍ɻ
δΣωϦΫεͷҙ ͜ΕίϯύΠϧΤϥʔ
δΣωϦΫεͷҙ δΣωϦΫε͋͘·Ͱܕ੍ͷΈɻ ࣮ࡍʹϑΟʔϧυʹΞΫηε͢Δ͜ͱͰ͖ͳ͍ɻ
dJOUWTJOU dJOUJOUΛϕʔεͱ͢ΔܕΛશͯड͚औΕΔ https://go.dev/play/p/E3kcU9-7TJ6
δΣωϦΫεΛ༻͖͢ͱ͖ w σʔλߏ FHόΠφϦπϦʔɺ࿈݁Ϧετɺώʔϓ w εϥΠεɺϚοϓɺ͓ΑͼҙͷλΠϓͷνϟωϧͰಈ࡞͢Δؔ w δΣωϦΫεΛͬͯৼΔ͍ΛநԽ͢Δ
εϥΠεɺϚοϓɺ͓ΑͼҙͷλΠϓͷνϟωϧͰಈ࡞͢Δؔ δΣωϦΫεΛ༻͖͢ͱ͖
δΣωϦΫεΛͬͯৼΔ͍ΛநԽ͢Δ δΣωϦΫεΛ༻͖͢ͱ͖
δΣωϦΫεΛ༻͖͢Ͱͳ͍ͱ͖ w ड͚औͬͨҾͷϝιουΛ༻͢Δͱ͖ w δΣωϦΫεΛ͏͜ͱͰίʔυ͕ෳࡶʹͳΔͱ͖ (Pͷ։ൃऀؒδΣωϦΫεͳ͠Ͱ͖ͬͯͨ
δΣωϦΫεΛ༻͖͢Ͱͳ͍ͱ͖ ड͚औͬͨҾͷϝιουΛ༻͢Δͱ͖ͷྫ
5*1 ܕͷຒΊࠐΈ 60
TUSVDUͷ&NCFEEJOH &NCFEEJOHͷઆ໌ࣗମ5JQͰղઆ͠·ͨ͠ͷͰ ͦͪΒͷεϥΠυΛࢀর͍ͯͩ͘͠͞ɻ https://speakerdeck.com/tomo1227/goyan-yu-100tips-no-dot-1-5-matome?slide=91
TUSVDUͷ&NCFEEJOH ࠶ܝ 4USVDUʹTUSVDUΛFNCFE 62
ܕͷຒΊࠐΈ w ϑΟʔϧυͷΞΫηεΛ؆୯ʹ͢ΔͨΊͷγϯλοΫεγϡΨʔͱ͠ ͯɺ༻ͯ͠ͳΒͳ͍ɻʢ 'PP#BS#B[ ͷΘΓʹ 'PP#B[ ͳͲʣ ͜Ε͕།ҰͷࠜڌͰ͋Δ߹ɺ෦ͷܕΛຒΊࠐ·ͣɺΘΓʹϑΟ
ʔϧυΛ͏ w ֎෦͔ΒӅṭ͍ͨ͠σʔλৼΔ͍ΛϓϩϞʔτ͍͚ͯ͠ͳ͍ɻ ߏମͷඇެ։Ͱ͋Δ͖ϩοΫಈ࡞ʹΫϥΠΞϯτ͕ΞΫηεͰ͖ ΔΑ͏ʹ͢Δ߹ͳͲ 63
ܕͷຒΊࠐΈͷ 64 Ұݟӈͷίʔυͷํ͕ݟ͘͢ྑͦ͞͏͕ͩɺ͍͚ͬͯͳ͍μϝͳྫ ❌ ⭕
ܕͷຒΊࠐΈͷ 65 ͠ɺެ։͞ΕͨΠϯλʔϑΣΠεʹIncϝ ιουΛؚΉ߹ʹɺΫϥΠΞϯτ͔Β Lock()Unlock()͕ݟ͑ͯ͠·͏
ܕͷຒΊࠐΈͷ 66 ಉ໊͡લͷϑΟʔϧυ͕ଘࡏ͢Δͱ͖ɺFNCFEEJOHΛ ߦ͏ͱͲͷϑΟʔϧυʹΞΫηε͍ͯ͠Δͷ͔͕ ͔Γʹ͘͘ͳΔɻ
ܕͷຒΊࠐΈ 67 ͲͪΒΫϥΠΞϯτ͔ΒݟΔͱɺ 8SJUF $MPTFS Λެ։͍ͯ͠Δ͜ͱʹ มΘΒͳ͍ˠແବͳίʔυΛݮΒͤΔ
·ͱΊ w ܕຒΊࠐΈɺϘΠϥʔϓϨʔτίʔυ ݴޠ্༷ল͘ࣄ͕Ͱ͖ ͳ͍ఆܕతͳίʔυ Λճආ͢Δͷʹཱͭ w ެ։͢ΔͨΊ͚ͩʹߦ͍ɺӅ͞ΕΔ͖ཁૉΛϓϩϞʔτ͠ͳ͍ Α͏ʹ͢Δ