ããã¯ããã€ããã£ã³ãã®èšäºã®ç¿»èš³ã§ã- ãªãªãžãã« ïŒ2017幎3æ24æ¥å
¬éïŒ
Go- Jjujuã§æžãããæ倧èŠæš¡ã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã®3.5幎ã®äœæ¥ã®åŸã2017幎1æ31æ¥ã¯Canonicalã§ã®æåŸã®æ¥ã§ããã
å·çæç¹ã§ã¯ãã¡ã€ã³ã®Jujuãªããžããªã¯3,542ãã¡ã€ã«ã540,000è¡ã®Goã³ãŒãã§ãïŒãã®æ°ã«ã¯65,000è¡ã®ã³ã¡ã³ãã¯å«ãŸããŠããŸããïŒã æšæºã©ã€ãã©ãªãé€ããã¹ãŠã®äŸåé¢ä¿ãèæ
®ãããšãJujuã«ã¯9,523åã®ãã¡ã€ã«ãå«ãŸãããã®äžã«ã¯1,963,000è¡ã®Goã³ãŒãïŒ331,000è¡ã®ã³ã¡ã³ããé€ãïŒãå«ãŸããŠããŸãã
ãã®ãããžã§ã¯ãã®çŽ7,000æéã®äœæ¥ããåŠãã æèšã次ã«ç€ºããŸãã
JujuããŒã ã®å
šå¡ãç§ã«åæããŠããããã§ã¯ãªããã³ãŒãããŒã¹ãéåžžã«å€§ããããã1幎éäœæ¥ããŠã³ãŒãã®2/3ãèŠãããšãã§ããªãããšã«æ³šæããŠãã ããã ãã®ããã次ã®ããšãæççã«èããŠãã ããã
ãžã¥ãžã¥
Jujuã¯ãNomadãKubernetesãªã©ã«äŒŒããµãŒãã¹ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã§ãã Jujuã¯ïŒäž»ã«ïŒ2ã€ã®ãã€ããªãã¡ã€ã«ã§æ§æãããŸãïŒã¯ã©ã€ã¢ã³ããšãµãŒããŒã ãµãŒããŒã¯ããã€ãã®ç°ãªãã¢ãŒãã§åäœã§ããŸãïŒãµãŒããŒãããã€ãã®ç°ãªããã¡ã€ã«ã®åœ¢åŒã«ãªãåã¯ã99ïŒ
åäžã§ãã£ããããé
åžãããããã¡ã€ã«ãäœæããæ¹ãç°¡åã§ããïŒã ãµãŒããŒã¯ãéžæããã¯ã©ãŠãã§å®è¡ã§ããŸãã åå¥ã®ãã·ã³ã§è€æ°ã®è¿œå ã€ã³ã¹ã¿ã³ã¹ãå®è¡ã§ãããããã¯äžå€®ãµãŒããŒã«ãã£ãŠç®¡çãããŸãã ã¯ã©ã€ã¢ã³ãããã³è£å©ãã·ã³ã¯ãRPC over Webãœã±ãããä»ããŠã¡ã€ã³ãµãŒããŒãšéä¿¡ããŸãã
ãžã¥ãžã¥ã¯äžæ岩ã§ãã ãã€ã¯ããµãŒãã¹ã¯ãããŸããã1ã€ã®ãã€ããªãã¡ã€ã«ãå¿
èŠã§ãã Goã¯ç«¶äºåã«åªããŠããããããŽããã³ãäœãããããã¯ããããšãå¿é
ããå¿
èŠã¯ãããŸããã ãããã£ãŠããã¹ãŠã1ã€ã®ããã»ã¹ã§äœ¿çšãããšäŸ¿å©ã§ãã ã·ãªã¢ã«åãä»ã®ããã»ã¹éçžäºäœçšã«ãããªãŒããŒããããåé¿ã§ããŸãã ããã«ãããã³ãŒãã®çžäºäŸåæ§ãé«ãŸããŸãããéçºã«ãããŠè²¬ä»»ã®åé¢ãåžžã«æåªå
ãããããã§ã¯ãããŸããã çµå±ãã¢ããªã¹ã¯å°ããªãµãŒãã¹ã®æã§ããå Žåãããéçºãšãã¹ããã¯ããã«ç°¡åã§ãããæ£ããã³ãŒãåå²ãšã«ãã»ã«åã¯ã³ãŒãã®æ··ä¹±ãé¿ããã®ã«åœ¹ç«ã¡ãŸããã
ããã±ãŒãžç®¡ç
Jujuã¯èªå販売æ©ã䜿çšããŸããã ç§ã®æèŠã§ã¯ãããã¯äŸ¡å€ãããã ãããããããžã§ã¯ãã¯éåžžã®ããŒã«ãç»å Žããåã«éå§ãããèªå販売ã®äœ¿çšãžã®ç§»è¡ã¯ããã«è²»ããæéã®äŸ¡å€ããªãã£ãããã ã çŸæç¹ã§ã¯ãããžã£ãŒã»ãããã®ãŽããã»ãã ïŒã¡ãªã¿ã«ããã¯godep
ã¯ãããŸãgodep
ïŒã䜿çšããŠæ¹èšçããã£ããã£ããŠããŸãã 確ãã«ã圌ã«ã¯åé¡ããããŸã-圌ã¯ããªãã®GOPATHã®ä»ã®ããã±ãŒãžãæ··ä¹±ãããæå®ãããã³ãããã«åŸã£ãŠããããèšå®ããŸãããã®ãããèªå販売æ©ã䜿çšããªãå¥ã®ãããžã§ã¯ãããã«ããããšããã¹ã¿ãŒããã§ã¯ãªãäŸåé¢ä¿ããã«ããããå¯èœæ§ããããŸã-å
ã ãã ãããªããžã§ã³ãã³ããããããšãå埩å¯èœãªãã«ããåŸããïŒå€éšãªããžããªã§å®éã«èª°ãã²ã©ãããšãããªãéãïŒãåé¡ã¯ãããŸããã§ããã ãã ã ãã³ãããã®ããã·ã¥ãå«ããã¡ã€ã«ã¯åžžã«ç«¶åãã€ã³ãã§ãããå䜵ã å€ãã®å Žåãå€ãã®éçºè
ã«ãã£ãŠãå€æŽããããããé
ããæ©ããã2人ããã®ãã¡ã€ã«ã®åãè¡ãŸãã¯é£æ¥ããè¡ãå€æŽãããšãã«ç¶æ³ãçºçããã¯ãã§ãïŒæ³šïŒ godeps
ãŠãŒãã£ãªãã£ã¯ããœãŒã¹ãæŽæ°ãããã¡ã€ã«ã䜿çšããŸãããã±ãŒãžãšã€ã³ã¹ããŒã«ãããã³ãããã®ããã·ã¥ã瀺ãããŸãïŒã ããã¯æ¬åœã®åé¡ã«ãªã£ãã®ã§ããããã®ç«¶åãèªåçã«è§£æ±ºãããŠãŒãã£ãªãã£ã®äœæãéå§ããŸããïŒ godeps
ã¯ã³ããããããã³ãããã®æ¥ä»ãä¿åãããããã»ãšãã©ã®å Žåãæè¿ã®ã³ããããéžæããã ãã§ãïŒã glide
ã䜿çšããå Žåãããã³åäžãã¡ã€ã«ã«äŸåé¢ä¿ããã·ã¥ãä¿åããåæ§ã®ããŒã«ã䜿çšããå Žåãåé¡ã¯æ®ããŸãã ãããä¿®æ£ããæ¹æ³ãããããŸããã
å
šäœãšããŠãç§ã¯ããã±ãŒãžç®¡çã倧ããªåé¡ã§ãããšæããããšã¯äžåºŠããããŸããã§ããã ç§ãã¡ã®æ¥åžžã®ä»äºã§ã¯åãã«è¶³ããªãããšã§ãããããã£ãŠãããã±ãŒãžãããŒãžã£ãŒãäžè¶³ããŠããããã«äººã
ãGoãçå£ã«åãæ¢ããªããšãã話ãèªãã®ã¯ãã€ãå¥åŠã§ããã ã»ãšãã©ã®ãµãŒãããŒãã£ã®ãªããžããªã¯å®å®ããAPIããµããŒãããŠãããã³ãŒããç¹å®ã®ã³ãããã«ãã€ã³ãããããšãã§ããŸãã...ããã¯åé¡ã§ã¯ãããŸããã§ããã
ãããžã§ã¯ãçµç¹
Jujuã¯80ïŒ
ã®ã¢ããªã·ãã¯ãªããžããªïŒmonorepoïŒã§<github.com/juju/juju>ã«ãããæ®ãã®20ïŒ
ã®ã³ãŒãã¯å¥ã®ãªããžããªïŒ<github.com/juju>ïŒã«ãããŸãã ã¢ããªããžããªãå²ãåœãŠãããšã«ã¯é·æãšçæããããŸã...ã³ãŒãå
šäœã§å€§èŠæš¡ãªå€æŽãå ããã®ã¯ç°¡åã§ãããããã¯ããããfoo/bar/baz/bat/alt/special
å®å®ããAPIãå¿
èŠãšããªãããšãæå³ããŸã... ãããŠãããã¯ããã®ã¢ããªããžããªããããã±ãŒãžãã€ã³ããŒããã人ã«ãšã£ãŠã¯å
šãã®çæ°ã«å€ãããããã±ãŒãžã¯ä»åŸãã»ãŒåã圢ã§ååšãç¶ãããšèããŠããŸãã ãã¡ããããã®å Žåã¯èªå販売æ©ã§ç¯çŽã§ããŸãããã¢ããã°ã¬ãŒããå¿
èŠãªå Žåã¯å¹žéãç¥ããŸãã
ãŸããã¢ããªããžããªã¯ãAPIã責任ã®åæ
ã«ã€ããŠã®èŠæå¿ãäœããã³ãŒããçžäºäŸåããŠããããšãæå³ããŠããŸããã ç§ãã¡ãäžæ³šæã ã£ããšèšãããã§ã¯ãããŸããããAPIã®è²¬ä»»ãå質ãããã³å®å®æ§ã®åºåãåãã§ãããããã¡ã€ã³ã®Jujuãªããžããªä»¥å€ã®ãã®ã¯ã¯ããã«æšæºåãããŠããããã«æãããŸãã ãã¡ãããå€éšãªããžããªã®ããã¥ã¡ã³ããåªããŠããŠãããèªäœã倧ããªæå³ãæã¡ãŸãã
å€éšãªããžããªã®åé¡ã¯ãããã±ãŒãžã®ç®¡çãšãªããžããªéã®å€æŽã®åæåã§ããã å€éšãªããžããªãæŽæ°ããå Žåãå€éšå€æŽã®äœ¿çšãéå§ããã«ã¯ããã®åŸã¡ã€ã³ãªããžããªãå€æŽããå¿
èŠããããŸããã ãã¡ããã2ã€ã®githubãªããžããªã«å¯ŸããŠãããã¢ãããã¯ã«è¡ãããšã¯äžå¯èœã§ãã ãŸããã³ãŒãæ€æ»ããã¹ãã®å€±æãªã©ã®ããã«ã¡ã€ã³ã®å€æŽãè¡ãããšãã§ããªãå Žåããããå€éšãªããžããªã«äºææ§ã®ãªãå€æŽãããããã®å€éšãªããžããªã«å€æŽãå ããããšã決å®ãã人ã¯ã€ãŸãããŸãã
ãã1ã€èšããŸãããŠãŒãã£ãªãã£ãªããžããªã¯æªã§ãã å€ãã®å Žåã以åã®ããŒãžã§ã³ã®Jujuã®utils
ãªããžããªã®ãµãããã±ãŒãžã«ä¿®æ£ãããã¯ããŒãããŸããããä»ã®å€ãã®ç¡é¢ä¿ãªå€æŽããã®ä¿®æ£ã«è¿œãã€ãããšã«åã³æ°ä»ããŸããã ããã¯ã1ã€ã®ãªããžããªã«ããŸãã«ãå€ãããããã§ãã ããããçš®é¡ã®ã²ã©ããã©ã³ãããã¯ã©ã³ããããã³ããŒã¢ã³ãããŒã¹ãããããªããã°ãªããªãã£ãããšãå€æããŸããããäžè¬çã«ããã¯ãã¹ãŠæªãããšã§ãããããããŸããã utils
ããã±ãŒãžãšãªããžããªã«noãšã ãèšã£ãŠutils
ã
æ®éçãªã·ã³ãã«ã
Goã®ã·ã³ãã«ãã¯ãééããªãJujuãããžã§ã¯ãã®æåã®å€§ããªèŠå ã§ããã 以åã«æ¡çšããéçºè
ã®çŽ3åã®1ã ããGoã§åããŠããŸããã æ®ãã¯æ°åè
ã§ããã 1é±éåŸãã»ãšãã©ã®æ°èŠåå
¥è
ã¯ãã§ã«éåžžã«çµéšãç©ãã§ããŸãã 補åã®ãµã€ãºãšè€éãã¯ãéçºè
ã«ãšã£ãŠèšèªèªäœãããã¯ããã«å€§ããªåé¡ã§ããã ããçµéšè±å¯ãªGoéçºè
ããGoã§Xãäœæããæåã®æ¹æ³ã«ã€ããŠããŒã ãã質åãåããããšããããŸããããããã¯éåžžã«ãŸãã§ããã ããã以åã®äœåã®CïŒãšæ¯èŒããŠãã ããã以åã®äœåã§ã¯ãèšèªã®ããŸããŸãªéšåãåžžã«èª¬æããŠããŸããã
Goããã°ã©ãã³ã°ã®çµéšãããéçºè
ã ãã§ãªããäžè¬çã«åªç§ãªéçºè
ãéãããšãã§ãããããã·ã³ãã«ãã¯ãããžã§ã¯ãã«ãšã£ãŠå€§ããªæ©æµã§ããã ã€ãŸãããã®èšèªãã³ãŒãã®æ°ããéšåãç解ããäžã§é害ã«ãªãããšã¯ãããŸããã§ããã Jujuã¯éåžžã«å·šå€§ã ã£ãããããããžã§ã¯ãå
šäœã®è©³çŽ°ã誰ãç¥ãããšãã§ããŸããã§ããã ããããåæã«ãã»ãšãã©ãã¹ãŠã®äººãã³ãŒãã«ã¢ã¯ã»ã¹ãããšã©ãŒãå«ã100è¡çšåºŠã®è¡ãšããããã©ã®ããã«ïŒå€ããå°ãªããïŒå®è¡ãããããç¥ãããšãã§ããŸããã æ°ããã³ãŒããåŠç¿ããéã®åé¡ã®ã»ãšãã©ã¯ãã©ã®èšèªã§ãããã§ããããã«ãã¢ãŒããã¯ãã£ãšã¯äœããæ
å ±ã¯ã©ã®ããã«äŒéãããããæåŸ
ã¯äœãïŒå
ïŒæåŸ
ïŒã§ãã
Goã«ã¯éæ³ãã»ãšãã©ãªãã®ã§ãGoã§ãã®ãããžã§ã¯ããå®è£
ããã®ã¯ãä»ã®èšèªãããç°¡åã ã£ãããã«æããŸãã ä»ã®èšèªã«ããéæ³ã¯ãããŸããã äžèŠã·ã³ãã«ã§ç解ããããã³ãŒãè¡ã«äºæããªãæ©èœãäžããããšãã§ããéæ³ã å€ãGoã³ãŒããåŠç¿ãããšãããGoãã©ã®ããã«æ©èœããã®ãããšçåã«æãå¿
èŠã¯ãããŸãããGoã³ãŒãã®äžéšã«ãããªãããã§ãã ãã¡ãããããã¯ãæŽè³ãããè€éãªã³ãŒããé ãããæåŸ
ãåææ¡ä»¶ããªãããšãæå³ãããã®ã§ã¯ãããŸãã...ããããå°ãªããšãããã¯ãåºæ¬çãªã¢ã«ãŽãªãºã ãææ§ã«ããèšèªæ©èœã®èåŸã«é ãããŠããŸããã
ãã¹ãäž
ãã¹ãããã
Jujuã§ã¯ã gocheck
Gustavo Nieyemerã䜿çšããŠãã¹ããå®è¡ããŸããã gocheck
ã®æ©èœã®ãããã§ããã«ã¹ã¿ãã¯ãã¹ããå®è¡ããåãã¹ãã®åã«JujuãµãŒããŒç°å¢ãšmongoããŒã¿ããŒã¹ãèªåçã«å±éããããšãã§ããéçºè
ã®ãªãŒããŒããããåæžãããŸãã ãã¹ããäœæãããåŸããããã¯éåžžã«å€§ããããšãå€æããŸãããããã®ãããŒã¹ã»ãããããã¹ãã»ããã®æ§é ã«åã蟌ãã ãã§ããã¹ãŠã®æ±ããäœæ¥ãèªåçã«è¡ãããŸãã ãã®çµæãåãã¹ãã§å€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ãããããããŠããããã¹ãã¯éåžžã«çç£çãªã©ãããããã§ã»ãŒ20åéå®è¡ãããŸããã ãã®ãããªå€§éã®ãã¹ãã³ãŒãã«ããããã¹ãã³ãŒãã¯è匱ã«ãªããç解ãšãããã°ãå°é£ã«ãªããŸããã ãã¹ããæåãŸãã¯å€±æããçç±ãç解ããã«ã¯ããã¹ãé¢æ°ã®ãªãŒãã³äžæ¬åŒ§ã®åã«å®è¡ããããã¹ãŠã®ã³ãŒããç解ããå¿
èŠããããŸãããã»ããã«ã»ãããåã蟌ãã®ã¯ç°¡åãªã®ã§ãå€ãã®å Žåããã®ãªãŒãã³äžæ¬åŒ§ã®åã«LOTãè¡ãããŸããã
å°æ¥çã«ã¯ã代ããã«ããã¹ãã®ããã«æšæºã©ã€ãã©ãªã«åºå·ããŸãã æšæºã©ã€ãã©ãªã䜿çšãããã¹ãã¯ãéåžžã®Goã³ãŒããšåãæ¹æ³ã§èšè¿°ãããäŸåé¢ä¿ã¯æ瀺çã§ãªããã°ãªããŸããã ãã¹ãã®éå§æã«ã³ãŒããå®è¡ããå Žåã¯ãã¡ãœãããããã«é
眮ããã ãã§æžã¿ãŸã...ã¡ãœãããããã«é
眮ããå¿
èŠããããŸãã
ç¶ã®äžã®time
time
ããã±ãŒãžã¯ããã¹ããšãã¹ãã³ãŒãã®åªãã§ãã 30ç§åŸã«ã¿ã€ã ã¢ãŠãããã³ãŒããããå Žåãã©ã®ããã«ãã¹ãããŸããïŒ å®äºããã®ã«30ç§ããããã¹ãããããŸããïŒ ãããŠãäœããããŸããããªãå Žåãæ®ãã®ãã¹ãã¯30ç§éå®è¡ãããŸããïŒ ããã¯time.Sleep
ã ãã§time.Sleep
ã time.After
ãŸãã¯time.Ticker
ãŸã...äžè¬ã«ãããã¯ãã¹ãäžã®çœå®³ã§ãã ãŸãããã¹ãæïŒç¹ã«-raceã¹ã€ããã§éå§ãããšãïŒã®ã³ãŒãã¯ãå®çšŒåæãããã¯ããã«é
ãå®è¡ãããå¯èœæ§ãããããšã¯èšããŸã§ããããŸããã
解決çã¯æéãã¢ãã¯ããããšã§ã...ããã¯ãã¡ãããäºçŽ°ãªããšã§ã¯ãããŸããããªããªãã time
ããã±ãŒãžã¯åãªããããã¬ãã«é¢æ°ã®æã«ãããªãããã§ãã ãããã£ãŠã time
ããã±ãŒãžã䜿çšããå Žåã¯ãã€ã§ãã代ããã«time
ã©ãããŒã§ããç¹å¥ãªã€ã³ã¿ãŒãã§ã€ã¹ãååŸãããã®åœã®time
ããã¹ãçšã«æž¡ãå¿
èŠããããŸããããã¯æ¢ã«å¶åŸ¡ã§ããŸãã ããã«ãããæ¢è£œã®ã¢ã»ã³ããªãäœæããã³ãŒãã®å€æŽãé
åžããæéã倧å¹
ã«å¢å ããŸããã é·ãéãããã¯åžžã«å®å®ãããã¹ãã®ãœãŒã¹ã§ããã ãããã¯ã»ãšãã©ã®å Žåã«è¡ããããã¹ãã§ãããããæ¥CIãã·ã³ãææ
®æ·±ããã®ã§ãã£ãå Žåãããã€ãã®ã©ã³ãã ãã¹ãã¯å€±æããŸããã ãŸããæ°åäžè¡ã®ãã¹ããããå Žåãäžéšã®ãã¹ãã倱æããå¯èœæ§ãé«ããã»ãšãã©ã®å Žåãååãšåããã¹ãã§ã¯ãããŸããã ãã¬ã€ããŒãã¹ãã®ä¿®åŸ©ã¯ããã»ããã殺ããã²ãŒã ã«äŒŒãŠããŸããïŒå
ïŒã¢ã°ã©ãå©ããŸãã9ã€ã®ç©Žããã»ãããçªãåºãã¹ããããã·ã³ã§ããã³ããŒã§å©ããªããã°ãªããŸããïŒ ã
ã¯ãã¹ã³ã³ãã€ã«å¹žçŠ
OSãšã¢ãŒããã¯ãã£ã®ãã¹ãŠã®çµã¿åããã®æ£ç¢ºãªæ°ã¯ããããŸããããJujuãµãŒããŒã¯ãWindowsãšLinuxïŒCentosãšUbuntuïŒã ãã§ãªããamd64ã ãã§ãªããppc64leãarm64ãs390xãªã©ã®ãšãã»ã³ããªãã¯ãªã¢ãŒããã¯ãã£ãå«ããå€ãã®ã¢ãŒããã¯ãã£åãã«ééããªãæ§ç¯ãããŠããŸãã
Jujuã¯ãgcã³ã³ãã€ã©ããµããŒãããŠããªãã¢ãŒããã¯ãã£ã«æåã«gccgoã䜿çšããŸããã ãã®ãããgjuããšããã©ããã®ãªããã³ã»ã³ã¹ãåºããJujuã§ããã€ãã®ãã¹ããããŸããã gcãæŽæ°ããããã¹ãŠã®ã¢ãŒããã¯ãã£ããµããŒããå§ãããšããè¿œå ã®ã³ã³ãã€ã©ããããžã§ã¯ãããé€å€ããŠgcã§ã®ã¿åäœããããšãéåžžã«å¬ããæããŸããã
gcã«åãæ¿ãããšããã¢ãŒããã¯ãã£åºæã®ãšã©ãŒã¯ã»ãšãã©ãªããªããŸããã ãµããŒããããŠããJujuã¢ãŒããã¯ãã£ã®å¹
ãåºãããããã®ãšãã»ã³ããªãã¯ã¢ãŒããã¯ãã£ãCanonicalã«å€ãã®åœ±é¿åãæã€å€§äŒæ¥ã§äœ¿çšãããŠãããšããäºå®ãèãããšãããã¯çŽ æŽãããããšã§ãã
OSåºæã®ãšã©ãŒ
æåã«ãWindowsãµããŒãã®çµã¿èŸŒã¿ãéå§ãããšãOSé¢é£ã®ãšã©ãŒãããã€ãçºçããŸããïŒãã¹ãŠUbuntuã§éçºããããããCIãæ©èœãããŸã§Windowsåºæã®ãšã©ãŒã¯çºçããŸããã§ããïŒã åºæ¬çã«ã¯ã2ã€ã®äžè¬çãªãã¡ã€ã«ã·ã¹ãã ãšã©ãŒã«èŠçŽãããŸãã
1ã€ç®ã¯ãããã©ã«ãã§ãã¹ãã®ãã¹ã«çŽæ¥ã¹ã©ãã·ã¥ã䜿çšããããšã§ãã ããšãã°ãæ§æãã¡ã€ã«ããµããã©ã«ã㌠"juju"ã«ããã "config.yml"ãšåŒã°ããããšãããã£ãŠããå Žåããã¹ãã§ã¯ããã¡ã€ã«ãžã®ãã¹ãfolder + "/juju/config.yml"
ã§ãããWindowsã§ããããšã確èªã§ããŸãfolder + "\juju\config.yml"
ã§ãªããã°ãªããŸããã
ãã¹ãã§ãæ°ãããã£ã¬ã¯ããªãäœæãããšãã¯ãç¹ã«æååãšã¹ã©ãã·ã¥ãçµã¿åãããŠã§ã¯ãªãã path.Join
代ããã«filepath.Join
ã䜿çšããŸãã filepath.Join
ã¯ãOSã®æ£ããã¹ã©ãã·ã¥ã䜿çšããŸãã ãã¹ãæ¯èŒããã«ã¯ãåžžã«path.ToSlash
ã䜿çšããŠãæ¢ã«æ¯èŒå¯èœãªæšæºãã¥ãŒã«ãã¹ããã£ã¹ãããŸãã
ãã1ã€ã®ããããééãã¯ãLinuxéçºè
ãéããŠãããã¡ã€ã«ãåé€ãŸãã¯ç§»åã§ããããã«ããããšã§ãã ãŸããWindowsã¯ãã¡ã€ã«ãéããããšãã¡ã€ã«ãããã¯ãããããWindowsã§ã¯æ©èœããŸããã ããã¯ã defer file.Delete()
åŒã³åºãã®åœ¢ã§é »ç¹ã«çºçããFIFOã«ããã°ã defer file.Delete()
ã®é
延åŒã³åºãã®åã«åŒã³åºãããããããŸã éããŠãããã¡ã€ã«ãåé€ããããšããŸããã æ¥ããããã 解決çã®1ã€ã¯ã移åãŸãã¯åé€ãå®è¡ããåã«ãåžžã«file.Close()
åŒã³åºãã ãã§ãã Closeãæ°ååŒã³åºãããšãã§ããã®ã§ãé¢æ°ã®æåŸã§åäœdefer file.Close()
ãæ¢ã«defer file.Close()
ãŠããå Žåã§ããåé€ããåã«åŒã³åºãã®ã¯éåžžã«å®å
šã§ãã
ãããã®ãšã©ãŒã¯ã©ããé£ãããªããæšæºã©ã€ãã©ãªã§ã®ãã®ãããªåŒ·åãªã¯ãã¹ãã©ãããã©ãŒã ãµããŒãã«ãããã¯ãã¹ãã©ãããã©ãŒã ã³ãŒãã®éçºãç°¡åã«ãªããšæããŸãã
ãšã©ãŒåŠç
Goã®ãšã©ãŒåŠçã¯ãééããªãJujuã®å®å®æ§ã«æçãªå¹æããããããŸããã ç¹å®ã®é¢æ°ã倱æããå¯èœæ§ã®ããå Žæãç¥ãããšãã§ãããšããäºå®ã¯ãã¯ã©ãã·ã¥ãäºæããã³ãŒããæžãã®ãã¯ããã«ç°¡åã§ããããããåªé
ã«ãããè¡ããŸãã
æéã®çµéãšãšãã«ãJujuã¯åã«æšæºerrors
ããã±ãŒãžã䜿çšããŸããã ãã ãããšã©ãŒã®åå ãšãªã£ãã³ãŒãã®ãã¹ã远跡ããããã«ãããå€ãã®ã³ã³ããã¹ããå¿
èŠã§ãããšæãããšã©ãŒã«é¢ãããã詳现ãªæ
å ±ãä¿åããããã«ã³ã³ããã¹ããè¿œå ããããšãè¯ããšèããŸããïŒããšãã°ã fmt.Errorf
ã䜿çšããfmt.Errorf
æ
å ±ã¯å€±ãããŸãïŒå
ã®ãšã©ãŒã«ã€ããŠãããšãã°ã os.NotFound
ãšã©ãŒã®å ŽåïŒã
æ°å¹Žåããªãªãžãã«ã®ãšã©ãŒæ
å ±ã倱ãããšãªããããå€ãã®ã³ã³ããã¹ãããã£ããã£ããç¬èªã®ãšã©ãŒããã±ãŒãžã®éçºãéå§ããŸããã ããŸããŸãªæ¹åã«ç¡çã«æããåŸããã¹ãŠã®ã¢ã€ãã¢ãhttps://github.com/juju/errorsã«çµåããŸããã ãã¡ãããããã¯çæ³çãªã©ã€ãã©ãªã§ã¯ãªããé·å¹Žã«ããã£ãŠæ°æ©èœã®ããã«æ¡åŒµãããŠããŸããããè¯ãã¹ã¿ãŒãã§ããã
äž»ãªåé¡ã¯ãã¹ã¿ãã¯ãã¬ãŒã¹ãªã©ãåºåããå¿
èŠããããšãã«ãçŸåšã®ãã¡ã€ã«åãšè¡çªå·ãèŠã€ããããã«ãšã©ãŒãè¿ããšãã«åžžã«errors.Trace(err)
ãåŒã³åºãå¿
èŠãããããšã§ãã ä»æ¥ã¯ãDave Cheneyã®<github.com/pkg/errors>ããã±ãŒãžãéžæããŸããããã¯ããšã©ãŒãçæãããæç¹ã§ã¹ã¿ãã¯ãã¬ãŒã¹ãååŸããå®å
šãªãã¬ãŒã¹ãåé¿ããŸãã æ£çŽãªãšããããšã©ãŒã®ããã¹ã¿ãã¯ãã¬ãŒã¹ã¯æ¬åœã«äŸ¿å©ã ãšã¯æããŸããã å®éã«ã¯ãäºæããªããšã©ãŒã«ã¯fmt.Errorf("while doing foo: %v", err)
ããååãªã³ã³ããã¹ãããããããå€ãã®å Žåãã¹ã¿ãã¯ãã¬ãŒã¹ãå¿
èŠã§ãã å
ã®ãšã©ãŒã®ããããã£ã調æ»ããæ©èœã¯äŸ¿å©ãªå ŽåããããŸãããã»ãšãã©ã®å Žåãæã£ãŠããã»ã©é »ç¹ã§ã¯ãããŸããã foobar.init()
ãfoobar.init()
ãããªãã®ãè¿ãå Žåãããã¯æ¬åœã«ããªãã®ã³ãŒãã«åœ¹ç«ã¡ãŸããïŒ ã»ãšãã©ã®å Žåããããã
å®å®æ§
ãã®ãããªå·šå€§ãªãããžã§ã¯ãã®å ŽåãJujuã¯éåžžã«å®å®ããŠããŸãïŒããã¯ããšã©ãŒãå€ããªããšããæå³ã§ã¯ãããŸãã...ã¯ã©ãã·ã¥ããããšã¯ã»ãšãã©ãªãããéåžžã«ãã°ãå€ãããšãæå³ããŸãïŒã èšèªã«å€§ããäŸåãããšæããŸãã Canonicalã®åã«åããŠããäŒç€Ÿã«ã¯ã100äžè¡ã®CïŒã³ãŒããããããnull referenceãäŸå€ããã®ä»ã®æªåŠçã®äŸå€ã§éåžžã«é »ç¹ã«ã¯ã©ãã·ã¥ããŠããŸããã æ£çŽãªãšãããJujuãããã¯ã·ã§ã³ã³ãŒãã®ãã«ãã€ã³ã¿ãŒãåå ã§ãããã¯ã«ééããããšã¯äžåºŠããããŸãããæ°ããã³ãŒãã§äœãæããªããšãè¡ã£ããšãã¯ãéçºããã»ã¹ã§ããŸã«ãããããŸããã§ããã
Goãã«ããªã¿ãŒã³ãã¿ãŒã³ããšã©ãŒã瀺ãããã«äœ¿çšããããšç¢ºä¿¡ããŠããŸãã ãã³ãã¬ãŒãfoo, err :=
ã䜿çšããåžžã«ãšã©ãŒããã§ãã¯ããŸããããã«ãããå®éã«ã¯ãã«ãã€ã³ã¿ãŒãçºçããå¯èœæ§ãéåžžã«äœããªããŸãã è¿ãããå€æ°ã«ã¢ã¯ã»ã¹ããåã«ãšã©ãŒããã§ãã¯ããããšã¯Goã®åºæ¬ååã§ããããããã®èŠåã®äŸå€ãææžåããããšãéèŠã§ãã è¿œå ã®ãšã©ãŒæ»ãå€ã¯ãã³ã³ãã€ã©ãæªäœ¿çšã®å€æ°ããã§ãã¯ãããããç¡èŠãããå¿ãããããããšã¯ã§ããŸããã ããã«ãããä»ã®åæ§ã®èšèªãšæ¯èŒããŠãGoã§ã®NULLãã€ã³ã¿ãŒã®åé¡ãããªã軜æžãããŸãã
ãžã§ããªãã¯
ãã®ã»ã¯ã·ã§ã³ã¯çãã®ã§...ãŸããããªãã¯ç¥ã£ãŠããŸãã ãžã¥ãžã¥ã§ã®äœæ¥äžã«1ã2åã ããç§ã¯å人çã«ãžã§ããªãã¯ãäžè¶³ããŠãããšæããŸããã ãŸããã³ãŒãã®ã¬ãã¥ãŒäžã«ãä»ã®äººã®ãœãŒã¹ã®ãžã§ããªãã¯ãåžæããããšãèŠããŠããŸããã CïŒã§ãžã§ããªãã¯å»è¬åãšåºäŒã£ãèªç¥ïŒç¥çïŒè€éããã匷æãããå¿
èŠããªãã£ãããšãå¬ããæããŸããã Goã€ã³ã¿ãŒãã§ã€ã¹ã¯99ïŒ
ã®ã±ãŒã¹ã§ååã§ããã interface{}
æå³ãããã®ã§ã¯ãããŸããã Jujuã§interface{}
ã䜿çšinterface{}
ããšã¯ã»ãšãã©ãããŸããã§ããããã»ãšãã©ã®å Žåãäœããã®ã·ãªã¢ã«åãè¡ãããŠããããã§ãã
ç¶ã
ããã¯ãã§ã«ããªãé·ãæçš¿ãªã®ã§ããããæã ãšæããŸãã APIãããŒãžã§ãã³ã°ãããŒã¿ããŒã¹ããªãã¡ã¯ã¿ãªã³ã°ããã®ã³ã°ãã€ãã£ãªã ãã³ãŒãæ€æ»ãªã©ã«ã€ããŠããã£ãšå
·äœçãªããšã話ãããšãã§ããŸãã