1. Goèšèªãšã¯
Goèšèªãé称Golangã¯ãGoogleã2009幎ã«éçºãããªãŒãã³ãœãŒã¹ã®ããã°ã©ãã³ã°èšèªã§ããã·ã³ãã«ãªæ§æãé«éãªåäœã匷åãªäžŠè¡åŠçèœåãªã©ãç¹åŸŽã§ãSyntaxãšã©ãŒãã©ã³ã¿ã ãšã©ãŒãæå°éã«æããŠããŸãã
ãŸãNetworkãµãŒããŒãã¹ããªãŒãã³ã°ãµãŒãã¹ãªã©ã®éçºã§ããçšããããä»ãçµã¿èŸŒã¿ã·ã¹ãã ãCLIããŒã«ã®éçºã«ã察å¿ããŠããŸãããã®æ§èœãšå®å šæ§ãããäžçäžã®éçºè ã«ãã£ãŠæçšãããæ¯æãåŸãŠããŸãã
ä»åã®èšäºã§ã¯ãGoèšèªã®èµ·æºãšèæ¯ãç¹åŸŽãã¡ãªãããšãã¡ãªããããããŠäž»ãªçšéã«ã€ããŠæ·±å ãããŠãããŸãã
1.1 Goèšèªã®èµ·æºãšèæ¯
Goèšèªã¯ããœãããŠã§ã¢éçºã®çç£æ§ãé«ããããã«Googleãéçºãå§ããèšèªã§ãã詳现ãªèšèšãå¿ èŠãšãããèšè¿°ãã·ã³ãã«ã§ãããããéçºè ã®åŠç¿ã³ã¹ããåæžããŸãã
ãŸããGoèšèªã¯é«éãªã¬ãŒããžã³ã¬ã¯ã·ã§ã³ã«ããã¡ã¢ãªãŒäœ¿çšãèªåã§ç®¡çããã¡ã¢ãªãŒãªãŒã¯ããã³ã°ã¢ãããæªç¶ã«é²ãããšãã§ããŸããããã«ãããéçºå¹çãé£èºçã«åäžãããŠããŸãã
Goèšèªãéçºãããèæ¯ã«ã¯ãGoogleã®å·šå€§ãªã³ãŒãããŒã¹ãå¹æçã«ç®¡çããé«éã«ãã«ãããå¿ èŠæ§ããããŸããããã®ããã倧èŠæš¡ã·ã¹ãã ã®éçºã«ãããã¹ã±ãŒã©ããªãã£ãéåžžã«éèŠãããŠããŸãã
1.2 Goèšèªã®ç¹åŸŽ
Goèšèªã®æ倧ã®ç¹åŸŽã¯ãã®ã·ã³ãã«ãã§ããç°¡æœãªæ§æãšå®¹æãªåæšè«ã«ãããã³ãŒãã®èªã¿ããããšä¿å®æ§ã確ä¿ãããŸãããŸããèšå€§ãªæ©èœãç¡çã«è©°ã蟌ãŸããå¿ èŠãªãã®ã ããæäŸãããŠããŸãã
ãŸããGoèšèªã¯äžŠè¡åŠçã«åªããŠããŸããGoèšèªç¬èªã®ããŽã«ãŒãã³ããšãã軜éã¹ã¬ãããå©çšããããšã§ã容æã«äžŠååŠçãå®çŸã§ããŸããããã«ãããI/Oæäœãåæã«è¡ããµãŒããŒã·ã¹ãã ãã倧éã®ããŒã¿ãæ±ãã·ã¹ãã ãªã©ã§ããé«éã«åŠçãè¡ãããšãã§ããŸãã
ããã«ãGoèšèªã«ã¯åŒ·åãªããã±ãŒãžç®¡çã·ã¹ãã ããããã³ãã¥ããã£ã«ãã£ãŠæäŸãããæ§ã ãªã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ãç°¡åã«å©çšããããšãã§ããŸããããã«ãããéçºé床ãããã«åäžãããŸãã
1.3 Goèšèªã®ã¡ãªãããšãã¡ãªãã
Goèšèªã®ã¡ãªããã¯å è¿°ã®ç¹åŸŽãããç解ã§ããéããã·ã³ãã«ã§é«éãªåŠçãå¯èœã§ã䞊è¡ã»äžŠååŠçã容æã§ãã¡ã¢ãªãŒã®å®å šæ§ãé«ãããšã§ãããŸãã倧èŠæš¡ãªã·ã¹ãã ã®æ§ç¯ã«ãåããŠããŸãã
äžæ¹ã§ãGoèšèªã«ã¯ç¶æ¿ãã§ããªããäžé æŒç®åããªããGenericsã®æ å ±ãå°ãªããäŸå€åŠçããªãçã®ãã¡ãªãããååšããŸãããããã®ãã¡ãªããã«å¯ŸããŠã¯ãŠãŒã¶ãŒå£äœãæ¹åãèŠæããŠãããå°æ¥çãªæ¹åãæåŸ ãããŸãã
ãããããã®ã·ã³ãã«ãªç¹æ§ãšé«ãããã©ãŒãã³ã¹ã¯ãGoèšèªãçŸåšéåžžã«æ³šç®ã济ã³ãŠãã倧ããªçç±ãšãªã£ãŠããŸãã
1.4 Goèšèªã®çšéç¯å²
Goèšèªã¯WebãµãŒããŒãã¹ããŒããã©ã³ã¢ããªã®éçºãIoTãCLIã¢ããªã±ãŒã·ã§ã³ã®éçºãAPIãµãŒããŒéçºãªã©ãåºç¯ãªçšéã§æŽ»çšãããŠããŸãã
ç¹ã«ãé«æ§èœã§ãªãœãŒã¹å¹çãéèŠããWebãµãŒãã¹ãAPIãµãŒããŒã®éçºã§ã¯ã䞊ååŠçèœåãšã¡ã¢ãªå®å šæ§ã®é«ããè©äŸ¡ãããŠããŸãããŸãããGo mobileãããGobotããªã©ã®ããŒã«ãå©çšããŠãiOSãšAndroidã®éçºãããããŒã³ããããããªã©ã®çµã¿èŸŒã¿éçºãå¯èœã§ãã
ãããã®çç±ã«ãããå€ãã®äŒæ¥ãGoèšèªãæ¡çšããŠããããã®éèŠã¯å¢ãç¶ããŠããŸãã
2. Goèšèªã§ã®WebãµãŒããŒéçº
Goèšèªã¯ããã®é«éæ§ãšäžŠè¡åŠçæ©èœãªã©ã掻ãããWebãµãŒããŒã®éçºã«ãåºãå©çšãããŠããŸããããã«ãããApacheãªã©ã®WebãµãŒããŒãœãããçšæãããšãæ§ç¯ãå¯èœã§ãã以äžã®ç¯ã§ã¯ãGoèšèªãçšããWebãµãŒããŒéçºã®è©³çŽ°ãæãäžããŸãã
2.1 Goèšèªã§ã®ãµãŒããŒãµã€ãããã°ã©ãã³ã°
Goèšèªã¯ããµãŒããŒãµã€ãããã°ã©ãã³ã°ã«ãåªããŠããŸããGoã¯ã·ã³ãã«ã§çŽæçãªã³ãŒãèšè¿°ãå¯èœã«ããé«éãªåŠçãšäžŠè¡åŠçèœåãæã£ãŠãããããè€æ°ã®ãªã¯ãšã¹ããäžåºŠã«åŠçããå¿ èŠããããµãŒããŒãµã€ãã®ã³ãŒãã«æé©ã§ãã
ãŸããGoèšèªã¯éçåä»ãèšèªã§ãããããã³ãŒãã倧èŠæš¡ã«ãªã£ãŠã管çã容æã§ããããã¯ã倧èŠæš¡ãªãµãŒããŒãµã€ãéçºã«ãããŠéèŠãªãã€ã³ããšãªããŸãã
ããã«ãGoèšèªã¯ã¡ã¢ãªå®å šãªèšèªã§ãããããã¡ã¢ãªãªãŒã¯ãªã©ã®åé¡ã«å¯ŸããŠé«ãå®å šæ§ãæã£ãŠããŸããããããµãŒããŒãµã€ãããã°ã©ãã³ã°ã«ãããGoèšèªã®èŠªåæ§ã®é«ããè£ä»ããŠããŸãã
2.2 Goèšèªã§ã®WebãµãŒããŒã®èšèš
Goèšèªã®æšæºã©ã€ãã©ãªã«ã¯ãWebãµãŒããŒã®éçºã«å¿ èŠãªããã±ãŒãžãå€æ°å«ãŸããŠããŸããããã«ãããç¹å¥ãªå€éšã©ã€ãã©ãªãçšããã«ãGoã ãã§WebãµãŒããŒãèšèšããããšãå¯èœã«ãªããŸãã
net/httpããã±ãŒãžã¯ãHTTPã¯ã©ã€ã¢ã³ããšãµãŒããŒã®æ©èœãæäŸããŸããããã«ãããHTTPãªã¯ãšã¹ãã®éåä¿¡ããã¬ã¹ãã³ã¹ã®äœæãªã©ãè¡ããŸãããŸããhtml/templateããã±ãŒãžãçšããŠãHTMLãã³ãã¬ãŒããç°¡åã«æ±ãããšãã§ããŸãã
ããã«ãGoèšèªã®å ç¢ãªåã·ã¹ãã ãšãšã©ãŒãã³ããªã³ã°ã®ä»çµã¿ã«ãããå®å®æ§ãšå ç¢ããäž¡ç«ããWebãµãŒããŒã®èšèšãå¯èœãšãªããŸãã
2.3 Goèšèªã§ã®HTTPãã³ãã©ãŒã®äœæ
Goèšèªã§ã¯HTTPãã³ãã©ãŒãçšããŠãã¯ã©ã€ã¢ã³ãããã®ãªã¯ãšã¹ãã«å¯Ÿããã¬ã¹ãã³ã¹ãå¶åŸ¡ã§ããŸããHTTPãã³ãã©ãŒã¯ãWebãµãŒããŒéçºã«ãããŠéèŠãªéšåã§ããããããç°¡åã«äœæã§ããã®ãGoã®åŒ·ã¿ã®1ã€ã§ãã
HTTPãã³ãã©ãŒã¯ãç¹å®ã®URLãã¹ã«å¯Ÿãããªã¯ãšã¹ããåŠçããŸããããã¯ãfunc(ResponseWriter, *Request)ãšããã·ã°ããã£ãæã€é¢æ°ã§ãããDeveloperã¯ãããå®è£ ããããšã§ç¬èªã®ãã³ãã©ãŒãäœæã§ããŸãã
匷åãªäžŠè¡åŠçæ©èœãæã€Goèšèªãªãã§ã¯ã®ããã³ãã©ãŒã®äœæãšå©çšãå¯èœã§ããããã«ãããè€æ°ã®ãªã¯ãšã¹ããé«éã«åŠçããå¹ççãªWebãµãŒããŒãäœãããšãã§ããŸãã
2.4 Goèšèªã«ããå¹ççãªWebãµãŒããŒéçºã®æ¹æ³
Goèšèªã®é«éããšæ£ç¢ºãããããŠçç£æ§ã¯ãWebãµãŒããŒã®éçºã«ãããŠéåžžã«éèŠãªèŠçŽ ã§ããããã¯ããŠãŒã¶ãŒã®äœéšãåäžããããã©ãã£ãã¯ãã¹ã ãŒãºã«åŠçããéçºã®å¹çæ§ãåäžãããå¯èœæ§ãããããã§ãã
Goèšèªã®å ç¢ãªåã·ã¹ãã ã¯ããã°ãæªç¶ã«é²ãã®ã«åœ¹ç«ã¡ãŸãããŸããã·ã³ãã«ãªæ§æãšè¡šçŸåã®ããæšæºã©ã€ãã©ãªã掻çšããã°ãã³ãŒãã®èªã¿ããããšä¿å®æ§ã確ä¿ãã€ã€ãè€éãªWebãµãŒããŒãå¹ççã«éçºããããšãã§ããŸãã
ãŸããGoã«ã¯é«åºŠãªäžŠè¡åŠçæ©æ§ããããããã«ããWebãµãŒããŒã¯è€æ°ã®ãªã¯ãšã¹ããäžåºŠã«å¹ççã«åŠçããããšãã§ããŸãããããã®ç¹æ§ã¯ãGoèšèªãWebãµãŒããŒéçºã®ããã®åŒ·åãªããŒã«ã§ããããšãå®èšŒããŠããŸãã
3. Goèšèªã§ã®ã¹ããŒããã©ã³ã¢ããªéçº
ããã°ã©ãã³ã°èšèªGoã¯ãã¹ããŒããã©ã³ã¢ããªã±ãŒã·ã§ã³ã®éçºé åã§ã掻èºããŠããŸããç¹ã«ããGo mobileããšããããŒã«ãçšããããšã§ãiOSãšAndroidã®äž¡æ¹åãã®ã¢ããªã±ãŒã·ã§ã³éçºãå¯èœãšãªã£ãŠããŸãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãGo mobileã®çŽ¹ä»ãšå©çšæ³ãããã«iOSãšAndroidã¢ããªã±ãŒã·ã§ã³ã®éçºæ¹æ³ãæåŸã«Goèšèªãçšããã¹ããŒããã©ã³ã¢ããªã®éçºã®ã¡ãªããã«ã€ããŠè©³çŽ°ã«èª¬æããŸãã
3.1 Go mobileã®çŽ¹ä»ãšå©çšæ¹æ³
Go mobileã¯ãGoèšèªã«ããã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³éçºããµããŒãããããã®ããŒã«ãããã§ããAndroidãšiOSã®äž¡ãã©ãããã©ãŒã ã«å¯Ÿå¿ããŠãããOSã®éããæèããã«ã³ãŒããæžãããšãå¯èœã§ãã
Go mobileã®è£ åããã³ãã³ãã«ã¯ãGoããã±ãŒãžãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãšããŠãã«ããã’gomobile build’ãããã«ãããã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ãã’gomobile install’ãªã©ãååšããŸããããããçšãããšãGoèšèªã§ç·šéãããœãŒã¹ã³ãŒããããã£ãšããéã«ã¹ããŒããã©ã³ã§åäœããã¢ããªã±ãŒã·ã§ã³ã«å€æããããšãã§ããŸãã
3.2 Goã§ã®iOSã¢ããªéçº
Goã§ã¯iOSåãã®ã¢ããªã±ãŒã·ã§ã³éçºãå¯èœã§ããGo mobileã䜿çšããã°ãGoèšèªã®æã€é«éãªåäœæ§èœã䞊è¡åŠçèœåããiOSã¢ããªã±ãŒã·ã§ã³ã«ä»äžããããšãã§ããŸãã
ãgomobile bindãã®ã³ãã³ãã䜿çšããã°ãGoã³ãŒããObjective-Cã®ãã¬ãŒã ã¯ãŒã¯ãšããŠãã€ã³ãã§ããŸããããã«ãããGoã§èšè¿°ãããæ©èœãObjective-CãSwiftããåŒã³åºããŠæŽ»çšããããšãå¯èœãšãªããŸãã
3.3 Goã§ã®Androidã¢ããªéçº
ãã¡ãããGo mobileãçšããã°Androidåãã®ã¢ããªã±ãŒã·ã§ã³éçºãå®çŸã§ããŸããJavaãKotlinèšèªã䜿çšããªããŠããGoèšèªã®ã¿ã§ã¢ããªã±ãŒã·ã§ã³ãå®è£ ããããšãã§ããŸãã
Androidã¢ããªã±ãŒã·ã§ã³ã®å Žåãããgomobile bindãã³ãã³ããå©çšããŸããããã®å Žåã¯Goã®ã³ãŒããJavaã®ã©ã€ãã©ãªãšããŠãã€ã³ãããŸããã€ãŸããGoã§èšè¿°ããæ©èœãJavaãKotlinããåŒã³åºãããšãã§ããŸãã
3.4 Goèšèªãçšããã¹ããã¢ããªéçºã®å©ç¹
ãªãGoèšèªãã¹ããã¢ããªéçºã«çšããã®ãããã®æ倧ã®å©ç¹ã¯ãé«æ§èœãšç°¡æœãã§ããiOSãAndroidã®æ¬æ¥ã®éçºç°å¢ãšæ¯èŒãããšãGoèšèªã§éçºããããšã§åŠçé床ãåäžãããããšãã§ããŸãããŸããGoèšèªã§æžãããã³ãŒãã¯èªã¿ããããä¿å®ã容æãªãããé·æçãªãããžã§ã¯ãã«ãããŠãå¹ççã«éçºãè¡ãããšãå¯èœã§ãã
ãã®ä»ã«ããGoèšèªã®æå¹æ§ã¯å€å²ã«ããããŸããããšãã°ãGoèšèªã®äžŠè¡åŠçèœåã«ãã£ãŠããŠãŒã¶ãŒäœéšãåäžãããããšãå¯èœã§ãããŸããGo mobileãªã©ã®ããŒã«ã«ããããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã®éçºããã容æã«ãªããŸãã
4. Goèšèªã«ããIoTéçº
çŸä»£ç€ŸäŒã§æ¥éã«æ®åãããã®éèŠæ§ãå¢ããŠããåéã®äžã€ã«ãIoTïŒInternet of ThingsïŒããããŸãããããªIoTéçºã®çŸå Žã§ããGoèšèªã®å©çšã泚ç®ãããŠããŸãã
Goèšèªã®ç¹åŸŽã§ããã·ã³ãã«ãªæ§æãé«éãªåŠçã䞊è¡ã»äžŠååŠçã®èœåãIoTéçºã«ãããŠéå®ãããŸãã
ãããã®ç¹æ§ã掻ããããšã§ãå¹ççãã€å®å šãªIoTããã€ã¹ã®éçºãå¯èœãšãªãã®ã§ãã
4.1 Gobotãã¬ãŒã ã¯ãŒã¯ã®çŽ¹ä»ãšå©çšæ¹æ³
Gobotã¯ãGoèšèªãçšããIoTéçºãæ¯ãã匷åãªãã¬ãŒã ã¯ãŒã¯ã®äžã€ã§ãã
ãã®Gobotãã¬ãŒã ã¯ãŒã¯ãçšããããšã§ãGoèšèªã«ããIoTæ©åšã®çµã¿èŸŒã¿éçºã容æã«ãªããŸãããã®çºãããããããããŒã³ã®çµã¿èŸŒã¿éçºã«æå¹ã«å©çšã§ããŸãã
ãã¬ãŒã ã¯ãŒã¯ã掻çšããããšã§ãéçºå¹çãé£èºçã«åäžããäŒæ¥ãæãæ©èœã確å®ãã€è¿ éã«çã¿åºãããšãå¯èœãšãªããŸãã
4.2 Goèšèªã§ã®ãããŒã³ãããããã®çµã¿èŸŒã¿éçº
GoèšèªãçšãããããŒã³ãããããã®çµã¿èŸŒã¿éçºã¯ãæ¥çå ã§ãç¹ã«æ³šç®ãéããŠããŸãã
ããã¯ãçµã¿èŸŒã¿ã·ã¹ãã ã®éçºã«ãããŠããªã¢ã«ã¿ã€ã æ§ãšé«ãåŠçèœåãæ±ããããããã§ãGoèšèªã®åŒ·åãªäžŠè¡åŠçèœåã掻ããããããã§ãã
ããã«Goèšèªã¯ã¡ã¢ãªç¯çŽãšé«éãªåäœãæã¡åãããŠãããããçµã¿èŸŒã¿ã·ã¹ãã ã®éçºã«ãããŠéèŠãªåœ¹å²ãæãããŠããŸãã
4.3 GoèšèªãšIoTã®äºææ§
GoèšèªãšIoTã®äºææ§ã«ã€ããŠè§£èª¬ããŸããGoèšèªã¯ãã®ç¹æ§äžãå€æ§ãªãã©ãããã©ãŒã ã«å¯Ÿå¿å¯èœã§ãããè€æ°ã®æ©åšãšã®é£æºã䞊ååŠçãæ±ããããIoTéçºã«é©ããŠããŸãã
GoèšèªãæäŸããå®å šãªã¡ã¢ãªç®¡çã¯ãIoTããã€ã¹ã®é·æé皌åãå®å®ããæ§èœãä¿ã¡ã€ã€ããªãœãŒã¹ãå¹ççã«äœ¿çšããããšãå¯èœã«ããŸãã
以äžã®ãããªç¹æ§ãããGoèšèªãšIoTã®çžæ§ã¯éåžžã«è¯ããå€ãã®IoTéçºãããžã§ã¯ãã§æŽ»çšãããŠããã®ã§ãã
4.4 Goèšèªã«ããIoTéçºã®æªæ¥å
Goèšèªãæã£ãŠããäžé£ã®ç¹æ§ã¯ãIoTã®æªæ¥ãžãšç§ãã¡ãå°ããŸããäºå®ãGoèšèªã«ããIoTéçºã¯ãã§ã«å€ãã®ææãäžããŠããããã®å¹æã¯åºç¯ã«åãã§ããŸãã
IoTããã€ã¹ã®æ¥å¢ãšãããã«äŒŽãããŒã¿åŠçã®éèŠå¢å ã«å¯ŸããŠãGoèšèªã®é«éåŠçèœåãšäžŠè¡ã»äžŠååŠçåã¯å€§ãã«è²¢ç®ããŠããŸãã
ãããããGoèšèªã®æŽ»èºã¯ç¶ããIoTçéã§ã®æŽãªãæ®åãšæé·ãèŠããããšã§ãããã
5. Goèšèªã§ã®CLIã¢ããªã±ãŒã·ã§ã³ã®éçº
Goèšèªã¯ãã®ç¹æ§äžãCLIã¢ããªã±ãŒã·ã§ã³ã®éçºã«éåžžã«é©ããŠããŸããOSãããŒãžã§ã³ã«åããã«éçºãšãããã€ãå¯èœã§ãé«éã«å®è¡ã§ããããäžè¬çãªCLIã¢ããªã±ãŒã·ã§ã³ã®éçºã«éå®ãããŸãã
ãŸãããã®ã·ã³ãã«ãªèšè¿°æ§ãšã¡ã¢ãªå®å šæ§ããCLIéçºè ã«ãšã£ãŠé åçãªç¹æ§ãšãªã£ãŠããŸãã以äžã§ãGoèšèªãçšããCLIã¢ããªã±ãŒã·ã§ã³ã®éçºæ¹æ³çã«ã€ããŠè©³ããèŠãŠãããŸãããã
ããã¯ãšã³ãéçºã ãã§ãªããCLIã¢ããªã±ãŒã·ã§ã³ã®éçºããGoèšèªã®åŒ·åãªããŒã«ãã§ã€ã³ãšäžè²«æ§ã®ããèšèªãã¶ã€ã³ã«ãã£ãŠå®¹æã«ãªããŸãã
5.1 Goèšèªã§ã®CLIã¢ããªã±ãŒã·ã§ã³ã®äœææ¹æ³
Goèšèªã§CLIã¢ããªã±ãŒã·ã§ã³ãäœæããããã®åºæ¬çãªæé ã¯æ¬¡ã®éãã§ãããŸãã¯ã`main`é¢æ°ãäœæããããã°ã©ã ã®ãšã³ããªãŒãã€ã³ããå®çŸ©ããŸãã
次ã«ãGoã®åŒ·åãª`flag`ããã±ãŒãžã䜿çšããŠãCLIãšããŠäœ¿çšãããéã®ãªãã·ã§ã³ããã©ã°ãå®çŸ©ããŸãããã®ããã±ãŒãžã¯ããŠãŒã¶ãã³ãã³ãã©ã€ã³ããå€ãé©åã«ããŒã¹ã§ããããã«ããŸãã
ãããã®undefinedãããšãããšã¯å ·äœçãªæ©èœãå®è£ ããã°ãç°¡åãªCLIã¢ããªã±ãŒã·ã§ã³ã¯æ¢ã«åºæ¥äžããã§ããããã«é«åºŠãªCLIæ©èœãäœæããããã«ã¯ãCobraã®ãããªãµãŒãããŒãã£ã®ããã±ãŒãžãå©çšãããšããæè»ã«äœæã§ããŸãã
5.2 Goèšèªã§ã®CLIã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãæ¹æ³
Goèšèªã«ã¯åªãããã¹ãã£ã³ã°ãã¬ãŒã ã¯ãŒã¯ãæšæºã§æäŸãããŠãããCLIã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãã容æã«è¡ãããšãã§ããŸãã
`testing`ããã±ãŒãžãçšããŠããŠããããã¹ããçµ±åãã¹ããè¡ãããšãå¯èœã§ããè€éãªCLIã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã¹ãã®èªååã¯å¿ é ãšãªããŸãã
ããã«ã`os/exec`ããã±ãŒãžãå©çšããã°ãå®éã«çæããããã€ããªãèµ·åããåºåã確èªãããã¹ããå¯èœã«ãªããŸãã
5.3 Goèšèªã«ãããã«ããã©ãããã©ãŒã 察å¿CLIã®éçº
Goèšèªã¯ãã«ããã©ãããã©ãŒã 察å¿ã容æã§ãããããWindowsãmacOSãLinuxãªã©ãæ§ã ãªç°å¢äžã§ãåäœããCLIã¢ããªã±ãŒã·ã§ã³ãäžã€ã®ã³ãŒãããŒã¹ã§éçºããããšãå¯èœã§ãã
`GOOS`ããã³`GOARCH`ç°å¢å€æ°ãèšå®ããããšã§ãå¹ åºãçš®é¡ã®ã¿ãŒã²ããç°å¢åãã«ãã€ããªãã¯ãã¹ã³ã³ãã€ã«ããããšãã§ããŸãã
ãã®åŒ·åãªãã«ããã©ãããã©ãŒã ãµããŒãã¯ãCLIããŒã«ãå€æ§ãªç°å¢ã§åäœãããå¿ èŠãããéçºè ã«ãšã£ãŠå€§ããªå©ç¹ãšãªããŸãã
5.4 Goèšèªã§ã®CLIã¢ããªã±ãŒã·ã§ã³éçºã«ããããã¹ããã©ã¯ãã£ã¹
Goã§CLIã¢ããªã±ãŒã·ã§ã³ãéçºããéã®ãã¹ããã©ã¯ãã£ã¹ã®äžã€ã¯ããšã©ãŒãã³ããªã³ã°ãé©åã«è¡ãããšã§ããGoèšèªã§ã¯ããšã©ãŒã¯å€ã§ããããšã©ãŒãã§ãã¯ãå¿ããããªããã匷調ãããèšèšã«ãªã£ãŠããŸãã
ãŸããCLIã©ã€ãã©ãªã®éžæãéèŠãªãã€ã³ãã®äžã€ã§ããCobraãKingpinãªã©ã®ã©ã€ãã©ãªã人æ°ããããŸããããããžã§ã¯ãã«ãã£ãŠé©ããããŒã«ã¯ç°ãªããŸãã
æåŸã«ããŠãŒã¶ããªãã£ãèæ ®ããããšãéèŠã§ãããŠãŒã¶ã䜿çšããã€ã³ã¿ãŒãã§ãŒã¹ãç解ããããããŸãã䜿çšããŠæ¥œããããããªèšèšã«ããããšãéèŠã§ãã
6. Goèšèªã§ã®APIãµãŒããŒéçº
Goèšèªã¯ãã®æ§èœãšäžŠååŠçèœåã«ãããé«åºŠãªAPIãµãŒããŒã®éçºãå¯èœã§ãé床ãšå¹çæ§ãè¿œæ±ããéçºè ã«ãšã£ãŠæé©ãªããŒã«ã§ãã
- ãŸãã¯ãGoèšèªã䜿ã£ãREST APIãšGraphQL APIã®èšèšãšå®è£ æ¹æ³ãåŠã³ãŸãã
- 次ã«ãAPIã®ãã¹ãæ¹æ³ã«ã€ããŠçŽ¹ä»ããŸãã
- æåŸã«ãGoèšèªã®ç¹æ§ã掻ãããå¹æçãªAPIéçºã®ã¢ããã€ã¹ãæäŸããŸãã
6.1 Goèšèªã§ã®REST APIã®èšèšãšå®è£
Goèšèªã¯ãã·ã³ãã«ã§ããããããææ³ãšè»œéãªã«ãŒãã³ã°ãã¬ãŒã ã¯ãŒã¯ã«ãããREST APIã®èšèšãšå®è£ ã容æã§ããGoèšèªã®äž»ãªç¹åŸŽã§ããèªã¿ããããšå¹çæ§ã¯ãéçºè ã«ãšã£ãŠå€§ããªå©ç¹ãšãªããŸãã
ãŸããMuxãGinãªã©ã®è»œéãªã«ãŒãã£ã³ã°ãã¬ãŒã ã¯ãŒã¯ã䜿çšããã°ãAPIãšã³ããã€ã³ãã®èšèšãšæ§ç¯ãçŽæçã«è¡ãããªã¯ãšã¹ãã®ãã³ããªã³ã°ãç°¡åã«ãªããŸãã
ãã ããäžæ¹ã§Goèšèªã®REST APIéçºã§ã¯ããšã©ãŒãã³ããªã³ã°ãããã«ãŠã§ã¢ã®å®è£ ã«ã€ããŠãç解ããå¿ èŠããããŸãããããã¯éçºè ã®æè¡åãé«ããããæ·±ãç解ãå¯èœã«ããŸãã
6.2 Goèšèªã§ã®GraphQL APIã®èšèšãšå®è£
Goèšèªã¯GraphQL APIã®èšèšãšå®è£ ã§ã掻èºããŸããGraphQLã¯ãã¯ã©ã€ã¢ã³ããå¿ èŠãªããŒã¿ã®ã¿ãååŸã§ãããããAPIã®ããã©ãŒãã³ã¹ãšå¹çæ§ã«åªããŠããŸãã
Goã§ã®éçã¯ã軜éã§é床ãéããå®éã®ããŒã¿æ§é ãšäžèŽããåã·ã¹ãã ãæäŸããããããããã°äœæ¥ãå¹çåããŸããGraphQLãµãŒãã©ã€ãã©ãªã«ã¯ãgqlgenãgraph-gophers/graphql-goãªã©ããããŸãã
ãããã®ã©ã€ãã©ãªã䜿çšããã°ãGraphQLã¹ããŒãããèªåçã«Goã®ã³ãŒããçæããããšãããªãŸã«ããŒã®ããžãã¯ãç¬èªã«å®çŸ©ããããšãå¯èœã§ãã
6.3 Goèšèªã§ã®APIã®ãã¹ãæ¹æ³
APIã®ãã¹ãã¯å質ãä¿èšŒããéèŠãªããã»ã¹ã§ããGoèšèªã¯çµèŸŒã¿ã®ãã¹ãã£ã³ã°ããã±ãŒãžãæäŸããAPIã®ãã¹ããå¹æçã«å®æœã§ããŸãã
ãã®äžã§ããŠããããã¹ãã§ã¯ãgo testã³ãã³ãã䜿ã£ãŠé¢æ°ãã¡ãœããã®åäœã確èªã§ããŸãããšã³ããã€ã³ãã®å¿çããã¹ãããããã«ã¯ãhttptestããã±ãŒãžã掻çšããŸãã
ããã«ãçµ±åãã¹ããè¡ãå Žåãtestifyã©ã€ãã©ãªãçšãããšãè€éãªãã¹ãã¹ã€ãŒãã管çãããããªããŸãã
6.4 Goèšèªã®ç¹æ§ã掻ãããAPIéçºã®ã¢ããã€ã¹
Goèšèªã®ç¹æ§ã掻ãããšãé«å質ãªAPIéçºãå¯èœã§ããç¹ã«ã䞊ååŠçã®èœåãå©çšããã°ããšã³ããã€ã³ãéã®ããããã³ã°ãæžãããããã©ãŒãã³ã¹ãåäžãããŸãã
ãšã©ãŒãã³ããªã³ã°ãéèŠã§ãGoèšèªã§ã¯ãšã©ãŒãæ確ã«æ±ãããŸãããšã©ãŒãæ£ããæ±ãããšã§ãäºæããªãåé¡ãçºçããå Žåã«APIãå®å®ããŠåäœãç¶ããŸãã
ãŸããåé·ãªã³ãŒããé¿ããã·ã³ãã«ã§èªã¿ãããã³ãŒããæžãããšãéèŠã§ããããã¯ãã³ããã³ã¹æ§ãé«ãããã°ã®ãªã¹ã¯ãäœæžããŸãã