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
Tomoki Ota
June 14, 2024
Programming
57k
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
350
【Go言語】イテレータ
tomo1227
0
120
【Go言語】エラーハンドリング
tomo1227
0
100
AIに淘汰されないようにするには?
tomo1227
0
110
【Go言語】range
tomo1227
0
110
【Go言語】break
tomo1227
0
110
Other Decks in Programming
See All in Programming
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
180
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
350
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
340
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
180
What We Talk About When We Talk About XP
m_seki
2
660
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
120
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
290
Heart of Swift Concurrency
koher
0
910
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
440
アクセシビリティから考える情報設計
high_g_engineer
0
380
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
190
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
150
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
200
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
280
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Site-Speed That Sticks
csswizardry
13
1.5k
My Coaching Mixtape
mlcsv
0
320
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
580
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Raft: Consensus for Rubyists
vanstee
142
7.7k
Building Applications with DynamoDB
mza
96
7.2k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
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 ެ։͢ΔͨΊ͚ͩʹߦ͍ɺӅ͞ΕΔ͖ཁૉΛϓϩϞʔτ͠ͳ͍ Α͏ʹ͢Δ