Slide 1

Slide 1 text

Goの格言”Errors are values”の本質を読み解く さき(H.Saki) @saki_engineer Goのエラーハンドリング 最新事情Lunch LT APR 23 2024

Slide 2

Slide 2 text

自己紹介 About Me l ͖͞ )4BLJ ○ ຊۀͰ͸"84Λओઓ৔ʹͨ͠ Ϋϥ΢υΠϯϑϥ԰͞ΜΛ͍ͯ͠·͢ ○ 5XJUUFS!TBLJ@FOHJOFFS l աڈͷ੒Ռ෺ FUDʜ ;FOO ٕज़ॻయ ݄߸ʙ ݄߸

Slide 3

Slide 3 text

本日のテーマ Today’s Theme z&SSPSTBSFWBMVFTz ᴷᴷ (P1SPWFSCT 3PC1JLF

Slide 4

Slide 4 text

本日のテーマ Today’s Theme Τϥʔͱ͸஋Ͱ͋Δ

Slide 5

Slide 5 text

問 Question 2஋ͱ͸Կ͔ʁ

Slide 6

Slide 6 text

答え Answer "7BMVFTDBOCFQSPHSBNNFE ஋͸ϓϩάϥϜՄೳ

Slide 7

Slide 7 text

三段論法 Syllogism Τϥʔ͸஋ ஋͸ϓϩάϥϜՄೳ ˣ Τϥʔ͸ϓϩάϥϜՄೳ

Slide 8

Slide 8 text

「プログラム可能」とは何か? meaning of the term “programmed” l ϓϩάϥϜͰ͸ɺม਺΍ఆ਺ɾܕͱ͍ͬͨࣝผࢠͰ໊લ͕ͭ͘΋ͷΛѻ͍· ͢ ○ (Pͷݴޠ࢓༷ॻͰ͸͜ΕΒΛQSPHSBNFOUJUZͱݺΜͰ͍·͢ ■ *EFOUJGJFSTOBNFQSPHSBNFOUJUJFTTVDIBTWBSJBCMFTBOEUZQFT l ϓϩάϥϜՄೳͰ͋Δͱ͸ɺQSPHSBNFOUJUZͱͯ͠ѻ͏͜ͱ͕Ͱ͖Δͱಉٛ Ͱ͋Γɺ͢ͳΘͪҎԼͷಈ࡞͕Ͱ͖Δ͜ͱͰ͋Δͱࠓճ͸ఆΊ·͢ ○ ۩ମܕ΍ΠϯλʔϑΣʔεΛ༻͍ͯදݱ͢Δ ○ ஋Λม਺ɾఆ਺ʹόΠϯυ͢Δ

Slide 9

Slide 9 text

「エラーがプログラム可能」であるということ Errors can be programmed Τϥʔ͕ϓϩάϥϜՄೳͰ͋Δ͜ͱ QSPHSBNFOUJUZͱͯ͠ѻ͑Δ͜ͱ͸ɺҎ Լͷ͜ͱ͔Β֬ೝ͢Δ͜ͱ͕Ͱ͖·͢ɻ ۩ମܕ΍ΠϯλʔϑΣʔεΛ༻͍ͯදݱ͢Δ ஋Λม਺ɾఆ਺ʹόΠϯυ͢Δ • &SSPSΠϯλʔϑΣʔεΛຬͨ͢ߏ଄ମ Ͱ͋Ε͹ͲΜͳ۩ମܕͰ΋Τϥʔͱ͠ ͯѻ͏͜ͱ͕Մೳ • ม਺FSSʹΤϥʔΛόΠϯυͯ͠ɺͦͷ FSSʹରͯࣗ͠෼ͷ޷͖ͳΑ͏ʹॲཧΛه ड़Ͱ͖Δ • ߏ଄ମͷϑΟʔϧυʹΤϥʔϑΟʔϧυ Λఆٛ͢Δ͜ͱͰ஋ΛόΠϯυ͢Δ

Slide 10

Slide 10 text

「エラーがプログラム可能」であるということ Errors can be programmed Τϥʔ͕ϓϩάϥϜՄೳͰ͋Δ͜ͱ QSPHSBNFOUJUZͱͯ͠ѻ͑Δ͜ͱ͸ɺҎ Լͷ͜ͱ͔Β֬ೝ͢Δ͜ͱ͕Ͱ͖·͢ɻ ۩ମܕ΍ΠϯλʔϑΣʔεΛ༻͍ͯදݱ͢Δ ஋Λม਺ɾఆ਺ʹόΠϯυ͢Δ • &SSPSΠϯλʔϑΣʔεΛຬͨ͢ߏ଄ମ Ͱ͋Ε͹ͲΜͳ۩ମܕͰ΋Τϥʔͱ͠ ͯѻ͏͜ͱ͕Մೳ • ม਺FSSʹΤϥʔΛόΠϯυͯ͠ɺͦͷ FSSʹରͯࣗ͠෼ͷ޷͖ͳΑ͏ʹॲཧΛه ड़Ͱ͖Δ • ߏ଄ମͷϑΟʔϧυʹΤϥʔϑΟʔϧυ Λఆٛ͢Δ͜ͱͰ஋ΛόΠϯυ͢Δ ࠓ೔͸͜ͷྫΛͨ͘͞Μ঺հ͠·͢

Slide 11

Slide 11 text

(余談) panicはプログラム可能ではない Panic cannot be programmed ΤϥʔͱΑ͘ൺֱͯ͠ޠΒΕΔQBOJD͸QSPHSBNFOUJUZͱ͸Έͳͤͣɺϓϩά ϥϜՄೳͰ͋Δͱ͸ݴ͑·ͤΜɻ l QBOJD͸ʮΰʔϧʔνϯΛऴྃͤͯ͞ݺͼग़͠ݩʹฦ͢ˠɾɾɾʯΛ܁Γฦ͠ ͯίʔϧελοΫΛר͖໭͢ऴྃγʔέϯεͷ͜ͱ ○ 5IJTUFSNJOBUJPOTFRVFODFJTDBMMFEQBOJDLJOH CVJMUJOQBDLBHFͷ HPEPDΑΓ l ͜ͷऴྃγʔέϯεͷಈ࡞Λ։ൃऀ͸ࣗ༝ʹΧελϚΠζ͢Δ͜ͱ͸Ͱ͖· ͤΜ ○ SFDPWFSΛ࢓ࠐΜͰελοΫר͖໭ΓΛࢭΊͯɺΰʔϧʔνϯͷॲཧΛ HSBDFGVMʹऴྃͤ͞Δ͙Β͍͔͠ଧͪख͕ͳ͍ l QBOJDͱ͍͏ࣄ৅ͦͷ΋ͷΛ۩ମܕ΍ΠϯλʔϑΣʔεΛ༻͍ͯදݱ͢Δͩͱ ͔ɺม਺ɾఆ਺ʹόΠϯυ͢Δػೳ͸ͳ͍

Slide 12

Slide 12 text

bufio.Readerの場合 Examples 3FBEFSߏ଄ମͷ಺෦ʹFSSϑΟʔϧυΛอ͓͖࣋ͯ͠ɺʮFSS͕͋ΔͳΒಡΈࠐ ΈͤͣʹଈSFUVSO ͦ͏Ͱͳ͚Ε͹SFBEΛߦ͍݁ՌΛFSSϑΟʔϧυʹอଘʯͱ ͍͏ॲཧΛߦ͍ͬͯ·͢ɻ

Slide 13

Slide 13 text

bufio.Readerの場合 Examples 3FBEFSߏ଄ମͷ಺෦ʹFSSϑΟʔϧυΛอ͓͖࣋ͯ͠ɺʮFSS͕͋ΔͳΒಡΈࠐ ΈͤͣʹଈSFUVSO ͦ͏Ͱͳ͚Ε͹SFBEΛߦ͍݁ՌΛFSSϑΟʔϧυʹอଘʯͱ ͍͏ॲཧΛߦ͍ͬͯ·͢ɻ FSSϑΟʔϧυΛ༻ҙ ᶃFSSϑΟʔϧυʹΤϥʔ͕͢ Ͱʹ͋ΔͳΒಡΈࠐΈͤͣʹ ଈSFUVSO ᶄ৽ͨʹಡΈࠐΈΛͨ͠৔߹ ͸ͦͷ݁ՌΛFSSϑΟʔϧυʹ อଘ

Slide 14

Slide 14 text

bufio.Writerの場合 Examples CVGJP8SJUFSߏ଄ମ΋CVGJP3FBEFSͱಉ༷ʹɺ಺෦ʹFSSϑΟʔϧυΛอ࣋ͯ͠ ͓͖ɺͦͷ༗ແʹΑͬͯXSJUFͷॲཧΛߦ͏͔Ͳ͏͔෼ذͤ͞ޮ཰ԽΛਤ͍ͬͯ ·͢ɻ FSSϑΟʔϧυΛ༻ҙ ᶃFSSϑΟʔϧυʹΤϥʔ͕ͳ ͍ͳΒॻ͖ࠐΈΛ܁Γฦ͢ ᶄΤϥʔ͕ൃੜͨ͠Βଈ SFUVSO

Slide 15

Slide 15 text

golang.org/x/sync/errgroupの場合 Examples HPMBOHPSHYTZODFSSHSPVQ͸ෳ਺ͷΰʔϧʔνϯͰฒߦॲཧΛߦͬͨͱ͖ͷ ΤϥʔॲཧΛαϙʔτ͢ΔϥΠϒϥϦͰ͢ɻ ᶃFSSHSPVQ(SPVQܕͷม਺Λఆٛ ᶄFSSPSHSPVQ(SPVQ(P ϝιουΛ࢖ͬ ͯɺҾ਺ʹ౉ͨؔ͠਺Λฒߦॲཧͤ͞Δ ᶅFSSPSHSPVQ(SPVQ8BJU ϝιουΛ࢖ ͬͯฒߦॲཧதʹൃੜͨ͠ΤϥʔΛอଓ

Slide 16

Slide 16 text

golang.org/x/sync/errgroupの場合 Examples લड़ͷॲཧΛ͢ΔͨΊʹ΋ɺ(SPVQߏ଄ମ಺ʹ༻ҙ͞ΕͨFSSϑΟʔϧυ͕େ͍ ʹ໾ཱ͍ͬͯ·͢ɻ FSSϑΟʔϧυΛ༻ҙ (PϝιουͰ࣮ߦͨ͠ॲཧͰΤϥ ʔ͕ൃੜͨ͠ΒFSSϑΟʔϧυʹอ ଘ 8BJU͕ݺ͹ΕͨΒFSSϑΟʔϧυ ʹอଘ͞Ε͍ͯͨΤϥʔΛฦ٫

Slide 17

Slide 17 text

gqlgenの場合 Examples HRMHFO͸(SBQI2-αʔόʔίʔυΛࣗಈੜ੒ͤ͞ΔπʔϧͰ͢ɻϨεϙϯεʹ ؚΊΔෳ਺ݸͷΤϥʔΛ͞·͟·ͳܗͰ௥Ճ͢Δ͜ͱ͕Ͱ͖·͢ɻ ᶃHSBQIRM"EE&SSPSؔ਺ͷ DBMMͰΤϥʔΛ௥Ճ ᶄϦκϧόϝιουͷ໭Γ஋ʹΤϥ ʔΛฦ͢͜ͱͰΤϥʔΛ௥Ճ Ϩεϙϯεʹ͸FSSPSTϑΟʔϧυͱ͍ ͏ܗͰɺΤϥʔΛෳ਺ݸؚ·ͤΒΕΔ

Slide 18

Slide 18 text

gqlgenの場合 Examples ༷ʑͳखஈͰ௥Ճ͞ΕͨΤϥʔ͸SFTQPOTF$POUFYUߏ଄ମͷதʹஷΊΒΕͯɺ Ϩεϙϯεੜ੒࣌ʹ(FU&SSPSTؔ਺ͰऔΓग़͠ར༻͢Δܗͱͳ͍ͬͯ·͢ɻ

Slide 19

Slide 19 text

gqlgenの場合 Examples ༷ʑͳखஈͰ௥Ճ͞ΕͨΤϥʔ͸SFTQPOTF$POUFYUߏ଄ମͷதʹஷΊΒΕͯɺ Ϩεϙϯεੜ੒࣌ʹ(FU&SSPSTؔ਺ͰऔΓग़͠ར༻͢Δܗͱͳ͍ͬͯ·͢ɻ FSSPSTϑΟʔϧυΛ༻ҙ "EE&SSPS͞ΕΔͨͼʹɺ SFQTPOTF$POUFYUͷFSSPSTϑΟʔϧυʹ ཁૉΛ௥Ճ (FU&SSPST࣮ߦ࣌ʹɺSFQTPOTF$POUFYU ͷFSSPSTϑΟʔϧυʹஷ·ͬͨΤϥʔҰ ཡΛऔಘ

Slide 20

Slide 20 text

まとめ Summary l ʮΤϥʔ͸஋Ͱ͋Δʯͱ͸ɺΤϥʔ͸QSPHSBNFOUJUZͰ͋ΓҎԼͷૢ࡞͕Ͱ ͖Δͱ͍͏ҙຯ ○ ۩ମܕ΍ΠϯλʔϑΣʔεΛ༻͍ͯදݱ͢Δ ○ ஋Λม਺ɾఆ਺ʹόΠϯυ͢Δ l ஋Λม਺ɾఆ਺ʹόΠϯυͯ͠ॲཧͱ͍͏ͱɺFSSEP4PNFUIJOH ͷΑ͏ ͳίʔυΛਅͬઌʹࢥ͍ු͔΂Δํ͕ଟ͍Ͱ͕͢ɺߏ଄ମͷϑΟʔϧυʹΤ ϥʔΛೖΕΔύλʔϯ΋͋Γ·͢ l ΤϥʔϑΟʔϧυʹ஋Λอଘ͢Δɾηοτ͞Ε͍ͯΔ஋ʹΑͬͯϝιουͷ ڍಈΛม͑Δͱ͍͏Ҿ͖ग़͠͸͓͍࣋ͬͯͯଛ͸ͳ͍Ͱ͢

Slide 21

Slide 21 text

5IBOLZPVGPSMJTUFOJOH