Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
go100tips6-10.pdf
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Tomoki Ota
June 14, 2024
Programming
58k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
130
アーキテクチャとビジネスロジック
tomo1227
0
130
【Go言語】テスト
tomo1227
0
100
【Go言語】クロージャ
tomo1227
0
360
【Go言語】イテレータ
tomo1227
0
130
【Go言語】エラーハンドリング
tomo1227
0
110
AIに淘汰されないようにするには?
tomo1227
0
110
【Go言語】range
tomo1227
0
110
【Go言語】break
tomo1227
0
110
Other Decks in Programming
See All in Programming
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
150
contenteditable と日本語入力に向き合う
colorful12
0
180
phperだってパンチカードでコーディングしたい
o0h
PRO
0
240
プロダクトコードからライブラリの境界を見つける
elmetal
PRO
0
110
FreeBSDでZabbixを動かす
kenkino
0
360
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
360
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
140
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
110
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
480
Java 27新機能 / Java 27 new features
kishida
2
210
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2.3k
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.5k
Featured
See All Featured
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
370
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Accessibility Awareness
sabderemane
1
240
Mind Mapping
helmedeiros
1
400
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
870
Everyday Curiosity
cassininazir
0
350
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
550
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
590
Prompt Engineering for Job Search
mfonobong
0
490
How GitHub (no longer) Works
holman
316
150k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
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 ެ։͢ΔͨΊ͚ͩʹߦ͍ɺӅ͞ΕΔ͖ཁૉΛϓϩϞʔτ͠ͳ͍ Α͏ʹ͢Δ