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の格言”Errors are values”の本質を読み解く
Search
H.Saki
April 23, 2024
2.9k
10
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goの格言”Errors are values”の本質を読み解く
24/4/23 Findy Goのエラーハンドリング 最新事情Lunch LTにて発表
https://findy.connpass.com/event/314417/
H.Saki
April 23, 2024
More Decks by H.Saki
See All by H.Saki
さきさん文庫の書籍ができるまで
sakiengineer
0
680
slog.Handlerのよくある実装ミス
sakiengineer
5
850
どうしてもcgoから逃げられなくなったあなたに知ってほしいcgoの使い方入門
sakiengineer
1
3k
アプリ側のコードを書いていた人がLambdaに触れて気づいたこと
sakiengineer
0
1.8k
epollによるNetwork I/O in Goランタイム
sakiengineer
3
2.3k
スケジューラから学ぶGoランタイム 〜code reading of runtime pkg〜
sakiengineer
13
5.3k
select文の内部実装見つけました
sakiengineer
1
820
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
We Are The Robots
honzajavorek
0
350
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
The Curious Case for Waylosing
cassininazir
1
500
Skip the Path - Find Your Career Trail
mkilby
1
220
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
GitHub's CSS Performance
jonrohan
1033
470k
Embracing the Ebb and Flow
colly
88
5.2k
Automating Front-end Workflow
addyosmani
1369
210k
The Spectacular Lies of Maps
axbom
PRO
1
980
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
4
600
Transcript
Goの格言”Errors are values”の本質を読み解く さき(H.Saki) @saki_engineer Goのエラーハンドリング 最新事情Lunch LT APR 23
2024
自己紹介 About Me l ͖͞ )4BLJ ◦ ຊۀͰ"84Λओઓʹͨ͠ ΫϥυΠϯϑϥ͞ΜΛ͍ͯ͠·͢ ◦
5XJUUFS!TBLJ@FOHJOFFS l աڈͷՌ FUDʜ ;FOO ٕज़ॻయ ݄߸ʙ ݄߸
本日のテーマ Today’s Theme z&SSPSTBSFWBMVFTz ᴷᴷ (P1SPWFSCT 3PC1JLF
本日のテーマ Today’s Theme ΤϥʔͱͰ͋Δ
問 Question 2ͱԿ͔ʁ
答え Answer "7BMVFTDBOCFQSPHSBNNFE ϓϩάϥϜՄೳ
三段論法 Syllogism Τϥʔ ϓϩάϥϜՄೳ ˣ ΤϥʔϓϩάϥϜՄೳ
「プログラム可能」とは何か? meaning of the term “programmed” l ϓϩάϥϜͰɺมఆɾܕͱ͍ͬͨࣝผࢠͰ໊લ͕ͭ͘ͷΛѻ͍· ͢ ◦
(Pͷݴޠ༷ॻͰ͜ΕΒΛQSPHSBNFOUJUZͱݺΜͰ͍·͢ ▪ *EFOUJGJFSTOBNFQSPHSBNFOUJUJFTTVDIBTWBSJBCMFTBOEUZQFT l ϓϩάϥϜՄೳͰ͋ΔͱɺQSPHSBNFOUJUZͱͯ͠ѻ͏͜ͱ͕Ͱ͖Δͱಉٛ Ͱ͋Γɺ͢ͳΘͪҎԼͷಈ࡞͕Ͱ͖Δ͜ͱͰ͋ΔͱࠓճఆΊ·͢ ◦ ۩ମܕΠϯλʔϑΣʔεΛ༻͍ͯදݱ͢Δ ◦ ΛมɾఆʹόΠϯυ͢Δ
「エラーがプログラム可能」であるということ Errors can be programmed Τϥʔ͕ϓϩάϥϜՄೳͰ͋Δ͜ͱ QSPHSBNFOUJUZͱͯ͠ѻ͑Δ͜ͱɺҎ Լͷ͜ͱ͔Β֬ೝ͢Δ͜ͱ͕Ͱ͖·͢ɻ ۩ମܕΠϯλʔϑΣʔεΛ༻͍ͯදݱ͢Δ ΛมɾఆʹόΠϯυ͢Δ
• &SSPSΠϯλʔϑΣʔεΛຬͨ͢ߏମ Ͱ͋ΕͲΜͳ۩ମܕͰΤϥʔͱ͠ ͯѻ͏͜ͱ͕Մೳ • มFSSʹΤϥʔΛόΠϯυͯ͠ɺͦͷ FSSʹରͯࣗ͠ͷ͖ͳΑ͏ʹॲཧΛه ड़Ͱ͖Δ • ߏମͷϑΟʔϧυʹΤϥʔϑΟʔϧυ Λఆٛ͢Δ͜ͱͰΛόΠϯυ͢Δ
「エラーがプログラム可能」であるということ Errors can be programmed Τϥʔ͕ϓϩάϥϜՄೳͰ͋Δ͜ͱ QSPHSBNFOUJUZͱͯ͠ѻ͑Δ͜ͱɺҎ Լͷ͜ͱ͔Β֬ೝ͢Δ͜ͱ͕Ͱ͖·͢ɻ ۩ମܕΠϯλʔϑΣʔεΛ༻͍ͯදݱ͢Δ ΛมɾఆʹόΠϯυ͢Δ
• &SSPSΠϯλʔϑΣʔεΛຬͨ͢ߏମ Ͱ͋ΕͲΜͳ۩ମܕͰΤϥʔͱ͠ ͯѻ͏͜ͱ͕Մೳ • มFSSʹΤϥʔΛόΠϯυͯ͠ɺͦͷ FSSʹରͯࣗ͠ͷ͖ͳΑ͏ʹॲཧΛه ड़Ͱ͖Δ • ߏମͷϑΟʔϧυʹΤϥʔϑΟʔϧυ Λఆٛ͢Δ͜ͱͰΛόΠϯυ͢Δ ࠓ͜ͷྫΛͨ͘͞Μհ͠·͢
(余談) panicはプログラム可能ではない Panic cannot be programmed ΤϥʔͱΑ͘ൺֱͯ͠ޠΒΕΔQBOJDQSPHSBNFOUJUZͱΈͳͤͣɺϓϩά ϥϜՄೳͰ͋Δͱݴ͑·ͤΜɻ l QBOJDʮΰʔϧʔνϯΛऴྃͤͯ͞ݺͼग़͠ݩʹฦ͢ˠɾɾɾʯΛ܁Γฦ͠
ͯίʔϧελοΫΛר͖͢ऴྃγʔέϯεͷ͜ͱ ◦ 5IJTUFSNJOBUJPOTFRVFODFJTDBMMFEQBOJDLJOH CVJMUJOQBDLBHFͷ HPEPDΑΓ l ͜ͷऴྃγʔέϯεͷಈ࡞Λ։ൃऀࣗ༝ʹΧελϚΠζ͢Δ͜ͱͰ͖· ͤΜ ◦ SFDPWFSΛࠐΜͰελοΫר͖ΓΛࢭΊͯɺΰʔϧʔνϯͷॲཧΛ HSBDFGVMʹऴྃͤ͞Δ͙Β͍͔͠ଧͪख͕ͳ͍ l QBOJDͱ͍͏ࣄͦͷͷΛ۩ମܕΠϯλʔϑΣʔεΛ༻͍ͯදݱ͢Δͩͱ ͔ɺมɾఆʹόΠϯυ͢Δػೳͳ͍
bufio.Readerの場合 Examples 3FBEFSߏମͷ෦ʹFSSϑΟʔϧυΛอ͓͖࣋ͯ͠ɺʮFSS͕͋ΔͳΒಡΈࠐ ΈͤͣʹଈSFUVSO ͦ͏Ͱͳ͚ΕSFBEΛߦ͍݁ՌΛFSSϑΟʔϧυʹอଘʯͱ ͍͏ॲཧΛߦ͍ͬͯ·͢ɻ
bufio.Readerの場合 Examples 3FBEFSߏମͷ෦ʹFSSϑΟʔϧυΛอ͓͖࣋ͯ͠ɺʮFSS͕͋ΔͳΒಡΈࠐ ΈͤͣʹଈSFUVSO ͦ͏Ͱͳ͚ΕSFBEΛߦ͍݁ՌΛFSSϑΟʔϧυʹอଘʯͱ ͍͏ॲཧΛߦ͍ͬͯ·͢ɻ FSSϑΟʔϧυΛ༻ҙ ᶃFSSϑΟʔϧυʹΤϥʔ͕͢ Ͱʹ͋ΔͳΒಡΈࠐΈͤͣʹ ଈSFUVSO
ᶄ৽ͨʹಡΈࠐΈΛͨ͠߹ ͦͷ݁ՌΛFSSϑΟʔϧυʹ อଘ
bufio.Writerの場合 Examples CVGJP8SJUFSߏମCVGJP3FBEFSͱಉ༷ʹɺ෦ʹFSSϑΟʔϧυΛอ࣋ͯ͠ ͓͖ɺͦͷ༗ແʹΑͬͯXSJUFͷॲཧΛߦ͏͔Ͳ͏͔ذͤ͞ޮԽΛਤ͍ͬͯ ·͢ɻ FSSϑΟʔϧυΛ༻ҙ ᶃFSSϑΟʔϧυʹΤϥʔ͕ͳ ͍ͳΒॻ͖ࠐΈΛ܁Γฦ͢ ᶄΤϥʔ͕ൃੜͨ͠Βଈ SFUVSO
golang.org/x/sync/errgroupの場合 Examples HPMBOHPSHYTZODFSSHSPVQෳͷΰʔϧʔνϯͰฒߦॲཧΛߦͬͨͱ͖ͷ ΤϥʔॲཧΛαϙʔτ͢ΔϥΠϒϥϦͰ͢ɻ ᶃFSSHSPVQ(SPVQܕͷมΛఆٛ ᶄFSSPSHSPVQ(SPVQ(P ϝιουΛͬ ͯɺҾʹͨؔ͠Λฒߦॲཧͤ͞Δ ᶅFSSPSHSPVQ(SPVQ8BJU ϝιουΛ
ͬͯฒߦॲཧதʹൃੜͨ͠ΤϥʔΛอଓ
golang.org/x/sync/errgroupの場合 Examples લड़ͷॲཧΛ͢ΔͨΊʹɺ(SPVQߏମʹ༻ҙ͞ΕͨFSSϑΟʔϧυ͕େ͍ ʹཱ͍ͬͯ·͢ɻ FSSϑΟʔϧυΛ༻ҙ (PϝιουͰ࣮ߦͨ͠ॲཧͰΤϥ ʔ͕ൃੜͨ͠ΒFSSϑΟʔϧυʹอ ଘ 8BJU͕ݺΕͨΒFSSϑΟʔϧυ ʹอଘ͞Ε͍ͯͨΤϥʔΛฦ٫
gqlgenの場合 Examples HRMHFO(SBQI2-αʔόʔίʔυΛࣗಈੜͤ͞ΔπʔϧͰ͢ɻϨεϙϯεʹ ؚΊΔෳݸͷΤϥʔΛ͞·͟·ͳܗͰՃ͢Δ͜ͱ͕Ͱ͖·͢ɻ ᶃHSBQIRM"EE&SSPSؔͷ DBMMͰΤϥʔΛՃ ᶄϦκϧόϝιουͷΓʹΤϥ ʔΛฦ͢͜ͱͰΤϥʔΛՃ ϨεϙϯεʹFSSPSTϑΟʔϧυͱ͍ ͏ܗͰɺΤϥʔΛෳݸؚ·ͤΒΕΔ
gqlgenの場合 Examples ༷ʑͳखஈͰՃ͞ΕͨΤϥʔSFTQPOTF$POUFYUߏମͷதʹஷΊΒΕͯɺ Ϩεϙϯεੜ࣌ʹ(FU&SSPSTؔͰऔΓग़͠ར༻͢Δܗͱͳ͍ͬͯ·͢ɻ
gqlgenの場合 Examples ༷ʑͳखஈͰՃ͞ΕͨΤϥʔSFTQPOTF$POUFYUߏମͷதʹஷΊΒΕͯɺ Ϩεϙϯεੜ࣌ʹ(FU&SSPSTؔͰऔΓग़͠ར༻͢Δܗͱͳ͍ͬͯ·͢ɻ FSSPSTϑΟʔϧυΛ༻ҙ "EE&SSPS͞ΕΔͨͼʹɺ SFQTPOTF$POUFYUͷFSSPSTϑΟʔϧυʹ ཁૉΛՃ (FU&SSPST࣮ߦ࣌ʹɺSFQTPOTF$POUFYU ͷFSSPSTϑΟʔϧυʹஷ·ͬͨΤϥʔҰ
ཡΛऔಘ
まとめ Summary l ʮΤϥʔͰ͋ΔʯͱɺΤϥʔQSPHSBNFOUJUZͰ͋ΓҎԼͷૢ࡞͕Ͱ ͖Δͱ͍͏ҙຯ ◦ ۩ମܕΠϯλʔϑΣʔεΛ༻͍ͯදݱ͢Δ ◦ ΛมɾఆʹόΠϯυ͢Δ l
ΛมɾఆʹόΠϯυͯ͠ॲཧͱ͍͏ͱɺFSSEP4PNFUIJOH ͷΑ͏ ͳίʔυΛਅͬઌʹࢥ͍ු͔Δํ͕ଟ͍Ͱ͕͢ɺߏମͷϑΟʔϧυʹΤ ϥʔΛೖΕΔύλʔϯ͋Γ·͢ l ΤϥʔϑΟʔϧυʹΛอଘ͢Δɾηοτ͞Ε͍ͯΔʹΑͬͯϝιουͷ ڍಈΛม͑Δͱ͍͏Ҿ͖ग़͓͍࣋ͬͯͯ͠ଛͳ͍Ͱ͢
5IBOLZPVGPSMJTUFOJOH