Upgrade to Pro — share decks privately, control downloads, hide ads and more …

goはwireでDIする

 goはwireでDIする

Takashi Matsuyuki

May 30, 2019
Tweet

More Decks by Takashi Matsuyuki

Other Decks in Technology

Transcript

  1. Go͸wireͰDI͢Δ

  2. ࣗݾ঺հ ໊લ: দઇ @applepine1125

  3. ΞδΣϯμ • wireͱ͸ • ࢖͍ํ • ϝϦοτɺσϝϦοτ

  4. wireͱ͸ʁ

  5. wireͱ͸ʁ w ґଘੑͷ஫ೖɺॳظԽΛߦ͏ϝιουΛࣗಈੜ੒ͯ͘͠ΕΔ
 ϥΠϒϥϦ w QSPWJEFS ֤ίϯϙʔωϯτͷΠχγϟϥΠβ ͱJOKFDUPS QSPWJEFS ͨͪΛݺͼग़ͯ͠%*͢Δ

    Λ׆༻͍͍ͯ͠ײ͡ʹ%*͢Δ w HPPHMF੡ɺ(P$MPVE͔ΒϥΠϒϥϦͱͯ͠੾Γग़͞Εͨ
  6. ࢖͍ํ

  7. ࢖͍ํ ྫ ҎԼͷΑ͏ͳϞδϡʔϧ܈Λ͍͍ײ͡ʹ%*͍ͨ͠ ֤ϞδϡʔϧͷQSPWJEFSΛ࣮૷ XJSFHPʹJOKFDUPSΛ࣮૷ wire genͰXJSF@HFOHPΛੜ੒ɺඞཁͳ৔ॴͰݺͼग़͢

  8. ֤ϞδϡʔϧͷproviderΛ࣮૷

  9. ֤QSPWJEFSΛXJSF#VJMEʹ·ͱΊͯಥͬࠐΉ ߦ໨ʹ// +build wireinject Λهड़͠ͳ͍ͱXJSFHFO͕ೝࣝ ͯ͘͠Εͳ͍ injectorΛ࣮૷

  10. // +build wireinject Λهड़ͯ͋͠ΔϑΝΠϧΛೝࣝͯ͠ XJSF@HFOHP͕ੜ੒͞ΕΔ ଍Γͳ͍΋ͷ͕͋Δ৔߹͸$-*ͷΤϥʔίϝϯτʹग़Δ wire_gen.goͷੜ੒

  11. injectorͷهड़όϦΤʔγϣϯ FSSPSΛฦ͠͏ΔQSPWJEFS͕͋Δͱ͖ JOKFDUPSͷ໭Γ஋ʹFSSPSΛ௥Ճ͢Δ͚ͩ ྫ /FX%3FQPTJUPSZ͕FSSPSΛฦ͠͏Δ

  12. injectorͷهड़όϦΤʔγϣϯ FSSPSͱԿΒ͔ͷؔ਺Λฦ͠͏ΔQSPWJEFS͕͋Δͱ͖ JOKFDUPSͷ໭Γ஋ʹFSSPSͱGVOD Λ௥Ճ͢Δ͚ͩ ྫ /FX%3FQPTJUPSZ͕FSSPSͱ%#$MPTF͢Δؔ਺Λฦ͠͏Δ

  13. injectorͷهड़όϦΤʔγϣϯ ౎౓஫ೖ͍ͨ͠ߏ଄ମ͕͋Δͱ͖ JOKFDUPSͷҾ਺ʹ஫ೖ͍ͨ͠ߏ଄ମΛ௥Ճ͢Δ͚ͩ ྫ /FX%3FQPTJUPSZ͕JOGSB%#JOUFSGBDFΛҾ਺ʹͱΓɺJOUFSGBDFΛ࣮૷ͨ͠NZTRM΍SFEJT΁઀ଓ ͢ΔͨΊͷߏ଄ମΛJOKFDUPSͷݺͼग़͠ઌͰೖΕΔ

  14. wireͷศརػೳ ・wire.NewSet(..interface{}) ProviderSet QSPWJEFSΛάϧʔϐϯάͰ͖Δ ґଘ͕ଟ͍ϞδϡʔϧͷQSPWJEFSΛ·ͱΊ͓ͯ͘ͱศར #4FSWJDF͕ґଘ͢ΔϞδϡʔϧ͕ଟ͍ͱ͖ɺ/FX4FUͰ·ͱΊͯɾɾɾ JOKFDUPSͰݺͼग़͢ͱศར

  15. wireͷศརػೳ ଞʹ΋৭ʑ ɾwire show ͰQSPWJEFS4FUͷґଘϞδϡʔϧΛ֬ೝ ɾ#JOEJOH*OUFSGBDFͰJOUFSGBDFͱ࣮૷Λඥ͚ͮ ɾ#JOEJOH7BMVFTͰࢦఆͨ͠஋ΛಥͬࠐΜͰॳظԽ͢Δ υΩϡϝϯτΛಡ΋͏ IUUQTHJUIVCDPNHPPHMFXJSFUSFFNBTUFS@UVUPSJBM IUUQTHJUIVCDPNHPPHMFXJSFUSFFNBTUFSEPDT

    IUUQTHPEPDPSHHJUIVCDPNHPPHMFXJSF
  16. ϝϦοτɺσϝϦοτ

  17. ϝϦοτ ɾ௕ʑͱΠχγϟϥΠβॻ͔ͳ͍͍ͯ͘ͷָ ɾΤϥʔϋϯυϦϯάͱ͔͢Δඞཁ͕͋Δͱ͖ߋʹָ ɾ1SPWJEFS4FUศར σϝϦοτ ɾಉ͡ύοέʔδ಺ʹෳ਺XJSFHPஔ͚ͳ͍ ˠςετ༻ʹ%*͍ͨ͠ͱ͖ෆศ ɾΠχγϟϥΠβ಺Ͱෳࡶͳ͜ͱ͢ΔͨΊʹ͸ख࣮૷͢Δ͔͠ͳ͍ ׂͱඞཁे෼ͳػೳ͸ἧ͍ͬͯΔͷͰɺXJSFͰ΍ΓͮΒ͞Λײͨ͡ ͱ͖ʹͦ΋ͦ΋ઃܭ͕·͍ͣͷͰ͸ʁͱཱͪ໭ͬͯߟ͑Δ͖͔͚ͬʹ

    ͳΓͦ͏ ϝϦσϝ
  18. ୀ۶ͳ͜ͱ͸ ϥΠϒϥϦʹ΍ΒͤΑ͏