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
10
2.7k
Goの格言”Errors are values”の本質を読み解く
24/4/23 Findy Goのエラーハンドリング 最新事情Lunch LTにて発表
https://findy.connpass.com/event/314417/
H.Saki
April 23, 2024
Tweet
Share
More Decks by H.Saki
See All by H.Saki
どうしてもcgoから逃げられなくなったあなたに知ってほしいcgoの使い方入門
sakiengineer
1
2.6k
アプリ側のコードを書いていた人がLambdaに触れて気づいたこと
sakiengineer
0
1.6k
epollによるNetwork I/O in Goランタイム
sakiengineer
3
2.1k
スケジューラから学ぶGoランタイム 〜code reading of runtime pkg〜
sakiengineer
12
4.9k
select文の内部実装見つけました
sakiengineer
1
760
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.4k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
500
Large-scale JavaScript Application Architecture
addyosmani
512
110k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Code Review Best Practice
trishagee
69
18k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Code Reviewing Like a Champion
maltzj
524
40k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
Into the Great Unknown - MozCon
thekraken
39
1.9k
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