Goの文字列置換とその実装

4d78b749c315e21a956053dcbf0508a9?s=47 po3rin
July 14, 2020

 Goの文字列置換とその実装

文字列置換が func Replace と func (*Replacer) Replace の2つの標準機能のアルゴリズムやデータ構造の違いからなぜ2つあるのかを理解しよう。

4d78b749c315e21a956053dcbf0508a9?s=128

po3rin

July 14, 2020
Tweet

Transcript

  1. (Pͷจࣈྻஔ׵ͱͦͷ࣮૷ 'VLVPLBHP +VMZ  CZQPSJO (PTUSJOHSFQMBDFNFOUBOEJUTJNQMFNFOUBUJPO

  2. pon ( @po3rin )

  3. Introduction \

  4. (PʹΑΔจࣈྻஔ׵͸ਖ਼نදݱΛൈ͍ͯ̎ͭͷํ๏͕ఏڙ͞Ε͍ͯΔ 3FQMBDFJO(P 

  5. GVOD3FQMBDF GVOD 3FQMBDFS 3FQMBDF 3FQMBDFJO(P 

  6. จࣈྻஔ׵͕GVOD3FQMBDFͱGVOD 3FQMBDFS 3FQMBDFͷ̎ͭ͋Δͷ͔ʁ ಺෦ͷΞϧΰϦζϜ΍σʔλߏ଄ͷҧ͍͔Βͳͥͭ͋Δͷ͔Λཧղ͠Α͏ɻ 3FQMBDFJO(P 

  7. func Replace \

  8. ࣮͸GVOD3FQMBDF͸TUSJOHT*OEFY͑͋͞Ε͹૊ΈཱͯΕΔɻ GVOD3FQMBDF 

  9. TUSJOHT*OEFY͸Tͷத͔ΒTVCTUS͕࠷ॳʹग़ݱ͢ΔҐஔΛฦ͢ GVOD3FQMBDF 

  10. ӈ͸ΤοδέʔεΛམͱͨ͠ίʔυɻ <>CZUFͱDPQZͱTUSJOHT*OEFYΛۦ ࢖͍ͯ͠Δͷ͕Θ͔Δ GVOD3FQMBDF 

  11. GVOD3FQMBDF͕ಡΜͰ͍Δ TUSJOHT$PVOU΋TUSJOHT*OEFYʹґଘ ͍ͯ͠Δɻ GVOD3FQMBDF 

  12. ͭ·ΓGVOD3FQMBDF͸TUSJOHT*OEFY͑͋͞Ε͹૊ΈཱͯΕΔɻ GVOD3FQMBDF 

  13. TUSJOHT*OEFY͸#SVUFGPSDF΋͘͠͸3BCJOLBSQͰTVCTUSͷҐஔΛಛఆ͍ͯ͠Δɻ ৄ͍͠ղઆ͸ڈ೥ͷΞυϕϯτΧϨϯμʔʹ౤ߘͨ͠ͷͰੋඇʂ IUUQTQPSJODPNCMPHHPSBCJOLBSQ GVOD3FQMBDF 

  14. ࣮͸GVOD3FQMBDF͸TUSJOHT*OEFY͑͋͞Ε͹૊ΈཱͯΕΔɻ TUSJOHT*OEFY͸࠷௿ճݺͿ ग़ݱճ਺ͷऔಘʹݺͼग़͢ ஔ׵ॲཧ࣌ʹͦͷճ਺෼ݺͼग़͢ TUSJOHT*OEFY͸#SVUFGPSDF΋͘͠͸3BCJOLBSQΞϧΰϦζϜΛར༻͍ͯ͠Δ GVOD3FQMBDFͷ·ͱΊ

  15. func (*Replacer) Replace \

  16. GVOD 3FQMBDFS 3FQMBDF͕ੜ͍͑ͯΔSͰ͸಺෦࣮૷ΛೖΕସ͑ΔͨΊʹSFQMBDFS JOUFSGBDFͰந৅Խ͍ͯ͠ΔɻPMEOFX͸ޙͰ΋ৄ֬͘͠ೝ͠·͕͢ɺஔ׵͍ͨ͠จࣈྻͷϖ ΞͷϦετΛอ࣋͠·͢ɻ GVOD 3FQMBDFS 3FQMBDF 

  17. 3FQMBDFSJOUFSGBDFΛ࣮૷͢Δίϯϙ δοτܕ͸छྨɻVTFSʹ౉͞ΕͨҾ਺ʹ Αͬͯग़͠෼͚Δ GVOD 3FQMBDFS 3FQMBDF 

  18. ஔ׵ϖΞΛ֨ೲ͢ΔPMEOFXʹ࠷దͳSFQMBDFS͕બ͹ΕΔ GVOD 3FQMBDFS 3FQMBDF 

  19. ࠓճ͸ΑΓҰൠతͳSFQMBDFSͰ͋ΔHFOFSJD3FQMBDFSΛݟ͍ͯ͘ɻ಺෦ͰUSJF/PEFͳΔ΋ͷ͕͋Δɻ GVOD 3FQMBDFS 3FQMBDF 

  20. BY BZ CDCD Y YZ  B C Y Y

    Z DCD Z (PͰ͸TUSJOHTύοέʔδͰஔ׵ʹ࢖͏5SJF͕࣮૷͞Ε͍ͯΔ 5SJFߏங $PNQMFUF,FZ /PEF 5SJF 
  21. FF  B C Y Y Z DCD Z (Pͷ5SJFͰ͸$PNQMFUF,FZʹஔ׵ઌͷจࣈྻΛ֨ೲ͍ͯ͠Δ

    $PNQMFUF,FZ /PEF 5SJF  BB CC DD EE
  22. ԼهͷྫͰ͸3FQMBDFͷҾ਺ͷจࣈྻʮXSJUFT(PMBOHBOE $MBOHʯΛҰจࣈͣͭ5SJFΛ࢖ͬͯݕূ͍ͯ͘͠ɻ5SJFͰூͬͯ ͍ͬͯҰக͠ͳ͔ͬͨ෼͸࣍ͷ-PPL6QͰ͸ඈ͹͢ɻ  $ ( MBOH PMBOH $ (P

    5SJF 
  23. 5SJFΛMPPLVQ͍ͯ͠Δ 8SJUF4USJOHͰΘ͔Δ͕ɺෳ਺ͷஔ ׵ϖΞ͕͋ͬͯ΋ର৅จࣈྻશମ ͷ૸ࠪ͸ճͰऴΘΔɺ 5SJF 

  24. Ҿ਺࣍ୈͰSFQMBDFSΛ࢖͍෼͚͍ͯΔɻ HFOFSJD3FQMBDFS಺෦Ͱ͸5SJFΛར༻͍ͯ͠Δɻ ஔ׵Ϧετ͕ෳ਺͋ͬͯ΋ର৅จࣈྻͷ૸ࠪ͸ճͰࡁΉ GVOD 3FQMBDFS 3FQMBDFͷ·ͱΊ

  25. Conclusion \

  26. ಺෦ߏ଄Λ஌ΔͱԾઆཱ͕ͯΕΔ ͜͜·Ͱͷ஌͕ࣝ͋Ε͹ͲͪΒΛ࢖͑͹ྑ͍͔ɺͲ͏࢖͑͹ྑ͍ͷ͔ͷԾઆཱ͕ͯΕ·͢ɻ ஔ׵ϖΞ͕̍ͭͳΒ5SJFΛߏங͢Δίετ͕͋ΔͷͰ3FQMBDFͰे෼Ͱ͸ͳ͍͔ʁ ஔ׵ϖΞ͕ଟ͍ͳΒจࣈྻશମͷ૸͕ࠪճͰ͓ΘΔ3FQMBDFSΛ࢖͏΂͖Ͱ͸  ஔ׵ର৅ͷจࣈྻ͕௕͍PSଟ͍ͱ5SJFߏஙʹ͕͔͔࣌ؒΔͷͰJOJUͰݺͿ΂͖Ͱ͸ʁ ର৅จࣈྻͷ௕͕͞ࢧ഑తͳΒ૸ࠪҰճͷ3FQMBDFͷํ͕ྑ͍ʁ

  27. GVOD3FQMBDFͱGVOD 3FQMBDFS 3FQMBDFͷ಺෦࣮૷Λগ͠ղઆͨ͠ ࣅͨײ͡ͷؔ਺͕͋ͬͯ΋಺෦࣮૷ΛݟΔͱશવҧ͏ɻ ಺෦ͷΞϧΰϦζϜ΍σʔλߏ଄͕Θ͔ΔͱύϑΥʔϚϯεଌఆͷ݁Ռͷೲಘ౓͕ มΘΔɻ ·ͱΊ

  28. Appendix \

  29. QPOͷߟ͑ΔίʔυϦʔσΟϯάͷ5JQT ·ͣ͸Τοδέʔε͸ແࢹ ෳࡶͳ಺෦ؔ਺͸(P1MBZHSPVOEʹίϐϖͯ֓͠ܗΛัΒ͑Δ