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

202111Gocon_kaminashi_kimura

Aa7fd365de79f0d36755209b7f77fdc5?s=47 kimura
November 30, 2021
1.9k

 202111Gocon_kaminashi_kimura

Aa7fd365de79f0d36755209b7f77fdc5?s=128

kimura

November 30, 2021
Tweet

Transcript

  1. ϊϯσεΫϫʔΧʔ޲͚ ϊʔίʔυαʔϏεͷͭΒΈɾ͏·Έ גࣜձࣾΧϛφγ ΞϓϦέʔγϣϯΤϯδχΞ ɹɹɹ ɹɹɹɹ໦ଜ Ұ੒

  2. 1. ΧϛφγͷαʔϏε঺հ a. ੡଄ݱ৔ͷݱঢ় b. ੡଄ݱ৔Λม͑ΔͨΊͷΧϛφγͷΞϓϩʔν 2. ͏·Έ a. ΧϛφγGoྺ

    b. ײͨ͡͏·Έ&֤ΤϯδχΞGoྺ 
 3. ։ൃʹ౰ͨͬͯͷͭΒΈ ຊ೔ͷΞδΣϯμ
  3. 1. ΧϛφγͷαʔϏε঺հ

  4. ઃඋɾਗ਼૟ ཱྀ٬ɾӡ༌ ݐઃ ෱ࢱࢪઃ ੡଄ۀ εʔύʔɾখച ઀٬ۀ ҿ৯ళ ݱ৔Ͱಇ͘3,100ສਓ͕ɺࢴத৺Ͱඇޮ཰ͳΦϖϨʔγϣϯʹ೔ʑ௥ΘΕ͍ͯ·͢ɻ ϓϥΠϕʔτͰ͸εϚʔτϑΥϯΛ࢖͍ͬͯΔͷʹɺ৬৔Ͱ͸ͳ͔ͥࢴͱϖϯɺσδΧϝΛ࢖͏ඞཁ͕͋Δͷ͕ݱঢ়Ͱ͢ɻ

    ೔ຊͷबۀਓޱͷ໿൒਺͕PC΍IT͕࢖͑ͳ͍؀ڥͰಇ͍͍ͯ·͢ Χϛφγ͕ղܾ͍ͨ͜͠ͱ ೔ຊʹ͓͚Δ࿑ಇਓޱͷׂ߹ 9 σεΫ ϫʔΧʔ ϊϯσεΫ ϫʔΧʔ ˋ ˋ 52 48 ※ ಠཱߦ੓๏ਓ࿑ಇ੓ࡦݚڀɾݚमػߏʮ৬ۀผबۀऀ਺ʯΑΓ౰ࣾࢉग़
  5. ه࿥ ֬ೝ ूܭɾՄࢹԽ ޱ಄Ͱࢦಋ ͢΂ͯਓྗʹΑΔۀ຿ΦϖϨʔγϣϯ

  6. ݁Ռͱͯ͠ϛε͕ଟൃ

  7. ̋×νΣοΫද ࢴͷνΣοΫϦετʢϫʔΫϑϩʔʣ ΧϛφγͰσδλϧԽ ϊʔίʔυͰݱ৔؅ཧΞϓϦΛ࡞Δ͜ͱ͕Ͱ͖Δ ɹۀ຿ϑϩʔΛσδλϧԽ͢Δ

  8. ৚݅෼ذ ܁Γฦ͠ LOOP IF-ELSE ଟ༷ͳσʔλܕ TYPE ɹϊʔίʔυ͚ͩͲɺᙱ͍ॴʹख͕ಧ͘

  9. LOOP IF-ELSE TYPE ܁Γฦ̍͠ ܁Γฦ̎͠ ܁Γฦ̏͠ ਌ϊʔυ ճ౴ YESͷ৔߹ Noͷ৔߹

    ໦ߏ଄Ͱදݱ ɹ಺෦ͷσʔλ͸໦ߏ଄Ͱఆ͍ٛͯ͠Δ
  10. 2. ΧϛφγͷGoྺͱ͏·Έ

  11. - 2017೥ͷϓϩμΫτ։ൃ։͔࢝Β4೥໨ - Goαʔόબఆཧ༝ - ඪ४tool܈ͷ๛෋͞ - ౓ॏͳΔมߋʹڧ͍ - ܧঝ͕ଘࡏ͠ͳ͍

    - Composition over inheritance (ܧঝΑΓ߹੒) - Πϯϑϥ΁ͷॊೈੑ - ΫϩείϯύΠϧ - ίϯςφԽͱͷ૬ੑ - ౰࣌Go࠾༻ࣄྫ͕গͳ͍ ɹΧϛφγͷGoྺͱ͏·Έ1
  12. - ੩తܕ෇͚͕Ͱ͖Δ - 200௒ͷଟ֊૚ͷςʔϒϧ - IDEͷࣗಈิ׬ ɹΧϛφγͷGoྺͱ͏·Έ1 table ᶃ֊૚ߏ଄ʢ਌ࢠؔ܎ʣΛදݱ͢ΔͨΊͷςʔϒϧ ᶄσʔλͷܕ͝ͱʹςʔϒϧ

    ɹʢྫ͑͹ɺ਺஋ܕͱ೔෇ܕ͸ςʔϒϧఆ͕ٛҟͳΔʣ ɹɹetc...
  13. ɹ։ൃʹ͓͚Δ͏·Έ2 (੩తܕ෇͚ݴޠͷதͰ΋) ະܦݧͷΤϯδχΞ͕शಘ͠΍͍͢ - ৽نೖࣾऀ্ཱ͕͙͕ͪ͢Δ - ౰ࣾ಺ͰͷGoܦݧऀׂ߹= 3/7 Go JavaScr

    ipt TypeScr ipt Python Elixir Ruby Java PHP C# C C++ VB Engineer A ◦ ◦ ◦ ◦ B ◦ ◦ ◦ C ◦ ◦ ◦ D ◦ ◦ ◦ E ◦ ◦ ◦ ◦ ◦ ◦ F ◦ ◦ ◦ G ◦ ◦ ◦ ◦ ◦ ฐࣾͷೖࣾલͷΤϯδχΞ࢖༻ݴޠ
  14. 3.։ൃʹ౰ͨͬͯͷͭΒΈ

  15. ɹͭΒΈ1 ίʔυߦ਺ͷ૿Ճ܏޲ - ϦϨʔγϣϯͷଟ͞ - Preload Λଟ༻

  16. ɹͭΒΈ1 ίʔυߦ਺ͷ૿Ճ܏޲ - ϦϨʔγϣϯͷଟ͞ - genericsͷ༗ແ -> switchจʹཔΒ͟ΔΛಘͳ͍ - ໦ߏ଄ͷσʔλ->

    forloopͷଟ༻ - ؔ࿈ςʔϒϧͷ૿Ճ - ਌ࢠnodesͷϦϨʔγϣϯ
  17. ɹͭΒΈ2 RDBͰͷੑೳ௿Լ - ؔ࿈ςʔϒϧͷ૿ՃʹΑΓɺapplication ⁶ RDBؒͷ௨৴ճ਺ͷ૿Ճ - application ⁶ RDBؒͷ௨৴଎౓͕ϘϧτωοΫʹ

    gtx. Preload("Rel-A"). Preload("Rel-B"). Preload("Rel-C"). Find(s.ctx, &mainTable).Error; ORMΛ࢖ͬͨίʔυ select ~~~ select ~~~ select ~~~ ࣮ΫΤϦ - ORMଆͰͷେྔͷΫΤϦൃߦ 
 - ࠶ىॲཧ಺ͰͷDBΞΫηεॲཧΛॻ ͍ͯ͠·͍ɺେྔͷΫΤϦൃߦ
  18. ɹͭΒΈ2 RDBͰͷੑೳ௿Լ΁ͷରԠ Application ଆ - ΫΤϦൃߦॲཧͱ࠶ىॲཧΛ෼཭ - ORM࢖༻ -> (ςʔϒϧ݁߹Λߦ͏Α͏ͳ)

    ੜΫΤϦʹมߋ → DB ΫΤϦൃߦճ਺Λ཈͑Δ͜ͱ͕Ͱ͖ͨ DB ଆ - ςʔϒϧ݁߹Ͱ࢖༻͞ΕΔ֎෦Ωʔʹର͢Δindexͷ௥Ճ → ΫΤϦ୯ମͷੑೳͷվળ
  19. ɹͭΒΈ3 ςετσʔλͷ༻ҙ ଟ֊૚ͷςʔϒϧɾϦϨʔγϣϯঢ়گԼͰͷςετσʔλ४උ - ౰ॳJsonͰ۪௚ʹॻ͍ͯ͠·͕ͬͨͨΊʹɺAddReport ςετ΁ͷ1 test data ͚ͩͰ3000ߦ΄Ͳʹ

  20. None
  21. ɹͭΒΈ3 ςετσʔλͷ༻ҙ ଟ֊૚ͷςʔϒϧɾϦϨʔγϣϯঢ়گԼͰͷςετσʔλ४උ - ౰ॳJsonͰ۪௚ʹॻ͍ͯ͠·͕ͬͨͨΊʹɺAddReport ςετ΁ͷ1 test data ͚ͩͰ3000ߦ΄Ͳʹ

  22. ɹͭΒΈ3 ςετσʔλ४උ΁ͷରԠ Json -> ֎෦module (factory-go) ʹͯɺ֤ objectΛੜ੒͢ΔΑ͏ʹͨ͠

  23. ɾϊʔίʔυͰ࡞੒Ͱ͖Δݱ৔؅ཧΞϓϦʹΑΓɺݱ৔ͷDXΛՃ଎ͤ͞Α͏ ͱ͍ͯ͠Δ ɾ੩తܕ෇͚ͷಛੑɺෑډͷ௿͞ͷ఺ͰGoͷԸܙΛड͚͍ͯΔ ɾҰํͰɺଟ֊૚ͳσʔλߏ଄Ώ͑ͷίʔυ૿Ճ܏޲ɺࠓޙ૿͍͑ͯ͘Ͱ͋Ζ ͏RDB΁ͷΞΫηεɺςετσʔλ౳΁ͷରԠ͕՝୊ײͱͯ͋͠Δ ɹ·ͱΊ

  24. None
  25. ΦϑΟεʹ͜΋ͬͯɺ૝૾͚ͩͰҙࢥܾఆ͢Δɻ టष͍͜ͱ͔Βڑ཭Λஔ͖ɺखΛൈ͘ɻ ސ٬ͱ࿩͞ͳ͍ɻݱ৔ͷ੠Λฉ͜͏ͱ͠ͳ͍ɻ Ϣʔβʔࢹ఺Ͱ͸ͳ͘ɺࣗࣾ౎߹Λ༏ઌ͢Δɻ Don'ts ݱ৔ʹϖΠϯΛମײ͠ʹߦ͘ϝϯόʔ Ϣʔβʔͷ੠Λ௚઀ฉͨ͘Ίɺ෦ॺ໰Θͣݱ৔΁ ݱ৔υϦϒϯͳΤϐιʔυ

  26. None
  27. ఆྫϛʔςΟϯάɾࣄۀઓུϛʔςΟϯά શࣾɾνʔϜͰͷΦϑαΠτϛʔςΟϯά ৘ใͷಁ໌ੑɺຊԻΛͿ͚ͭ߹͏Φʔϓϯίϛϡχέʔγϣϯ શ։ΦʔϓϯͳΤϐιʔυ ࣗ෼ͷྑ͍ͱ͜Ζ΍ɺද໘తͳ࿩͔͠ڞ༗͠ͳ͍ɻ ϓϥΠυ͕ߴ͘ɺΞυόΠεΛ߈ܸͩͱड͚औΔɻ ٞ࿦ʹͳΔͱػݏ͕ѱ͘ͳΔɻ ౎߹ͷ͍͍ӕΛͭ͘ɻ ࿦ཧ΍ɺ਺஋ͷΈͰҙࢥܾఆ͠ɺҙݟΛฉ͔ͳ͍ɻ ஥ྑ͜͠Α͠ͰɺͿ͔ͭΔ͜ͱΛڪΕΔɻ

    ຊਓ͕͍ͳ͍৔ॴͰݴ͏ɻ Don'ts શࣾһͰࣗࣾͷΧϧνϟʔʹ͍ͭͯҙݟΛग़͠߹͏ ΤϯδχΞνʔϜͷϛʔςΟϯάͷ༷ࢠ ਓੜνϟʔτൃද
  28. None
  29. ා͕ͬͯνϟϨϯδ͠ͳ͍ɻ ࣦഊͯ͠΋Կ΋ֶ͹ͳ͍ɻ ࣦഊΛڐ༰͢ΔจԽΛצҧ͍͍ͯ͠Δɻ ͙͢΁ͨ͜ΕΔɻมʹߟ͑͗͢Δɻ ϓϥΠυ͕ߴ͍ɻ ࢹ࠲ɾࢹ఺͕௿͍ɻߴΈΛ໨ࢦ͞ͳ͍ɻ Don'ts Χϛφγͷ࢓ࣄͷελΠϧɻߟ͑ൈ͍ͨΒɺ·ͣ͸΍ͬͯΈΔɻ β൛ϚΠϯυͳΤϐιʔυ ࠾༻΢ΟογϡϦετ

    νʔϜͷ࢓૊Έͮ͘Γ ࢓૊Έͮ͘Γ΍੍౓ γϦʔζAࢿۚௐୡ ։ൃϓϩδΣΫτ 3
  30. EM/ΞϓϦΤϯδχΞ/SRE ੵۃ࠾༻த