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.5k
アプリ側のコードを書いていた人が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
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.4k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Site-Speed That Sticks
csswizardry
10
640
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
910
RailsConf 2023
tenderlove
30
1.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.8k
Making the Leap to Tech Lead
cromwellryan
134
9.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
41
7.3k
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