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
0
55k
go100tips6-10.pdf
Go言語100Tips No.6~10をまとめました。
Tomoki Ota
June 14, 2024
Tweet
Share
More Decks by Tomoki Ota
See All by Tomoki Ota
アーキテクチャの価値
tomo1227
0
96
アーキテクチャとビジネスロジック
tomo1227
0
95
【Go言語】テスト
tomo1227
0
55
【Go言語】クロージャ
tomo1227
0
270
【Go言語】イテレータ
tomo1227
0
72
【Go言語】エラーハンドリング
tomo1227
0
61
AIに淘汰されないようにするには?
tomo1227
0
60
【Go言語】range
tomo1227
0
66
【Go言語】break
tomo1227
0
63
Other Decks in Programming
See All in Programming
エンジニアに事業やプロダクトを理解してもらうためにやってること
murabayashi
0
140
複数チーム並行開発下でのコード移行アプローチ ~手動 Codemod から「生成AI 活用」への進化
andpad
0
140
Register is more than clipboard
satorunooshie
1
460
Verilator + Rust + gRPC と Efinix の RISC-V でAIアクセラレータをAIで作ってる話 RTLを語る会(18) 2025/11/08
ryuz88
0
340
JJUG CCC 2025 Fall: Virtual Thread Deep Dive
ternbusty
3
160
SUZURIの規約違反チェックにおけるクリエイタフィードバックの試⾏錯誤/Trial and Error in Creator Feedback for SUZURI's Terms of Service Violation Checks
ae14watanabe
1
140
Designing Repeatable Edits: The Architecture of . in Vim
satorunooshie
0
270
Vueで学ぶデータ構造入門 リンクリストとキューでリアクティビティを捉える / Vue Data Structures: Linked Lists and Queues for Reactivity
konkarin
1
180
AI POSにおけるLLM Observability基盤の導入 ― サイバーエージェントDXインターン成果報告
hekuchan
0
480
The Missing Link in Angular's Signal Story: Resource API and httpResource
manfredsteyer
PRO
0
110
「10分以内に機能を消せる状態」 の実現のためにやっていること
togishima
1
270
Nitro v3
kazupon
2
280
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Documentation Writing (for coders)
carmenintech
76
5.1k
The Cost Of JavaScript in 2023
addyosmani
55
9.2k
Being A Developer After 40
akosma
91
590k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Code Reviewing Like a Champion
maltzj
527
40k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
Writing Fast Ruby
sferik
630
62k
Faster Mobile Websites
deanohume
310
31k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
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 ެ։͢ΔͨΊ͚ͩʹߦ͍ɺӅ͞ΕΔ͖ཁૉΛϓϩϞʔτ͠ͳ͍ Α͏ʹ͢Δ