Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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.8k
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
slog.Handlerのよくある実装ミス
sakiengineer
5
750
どうしてもcgoから逃げられなくなったあなたに知ってほしいcgoの使い方入門
sakiengineer
1
2.7k
アプリ側のコードを書いていた人がLambdaに触れて気づいたこと
sakiengineer
0
1.6k
epollによるNetwork I/O in Goランタイム
sakiengineer
3
2.2k
スケジューラから学ぶGoランタイム 〜code reading of runtime pkg〜
sakiengineer
13
5.1k
select文の内部実装見つけました
sakiengineer
1
780
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
88
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
130
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
0
94
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
16
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
120
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
170
Site-Speed That Sticks
csswizardry
13
1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
80
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
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