ã¿ãªããããã«ã¡ã¯ïŒ
æçµçã«ãMark Simanã®æ¬ã
.NETã§ã®äŸåæ§æ³šå
¥ ããæŽæ°ããå¥çŽãçµã
ã§ããŸã ãäž»ãªããšã¯ã圌ãã§ããã ãæ©ãããã宿ãããããšã§ãã ç·šééšã«ã¯
ãå°æ¬ãããDinesh Rajputã«ããSpring 5ã®ãã¶ã€ã³ãã¿ãŒã³ã«é¢ããæ¬ããããŸãããã®ç« ã§ã¯ãäŸåé¢ä¿ã®å®è£
ã«é¢ããç« ããããŸãã
ç§ãã¡ã¯ãDIãã©ãã€ã ã®é·æãæãèµ·ããããããã«å¯Ÿããé¢å¿ãæç¢ºã«ããè峿·±ãè³æãé·ã鿢ããŠããŸããããä»ã§ã¯çºèŠãããŠããŸãã 確ãã«ãèè
ã¯Goã§äŸãæäŸããããšã奜ã¿ãŸããã ãã®ãããã¯ãããªãã«è¿ãå Žåããããããªãã®åœŒã®èãã«åŸãããšã劚ãããã³ã³ãããŒã«ã®å転ãšã€ã³ã¿ãŒãã§ãŒã¹ã®æäœã®äžè¬ååãçè§£ããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ãªãªãžãã«ã®ææ
çãªè²ä»ãã¯å°ãéãã§ã翻蚳äžã®æåç¬Šã®æ°ãæžããŸãã çŽ æµãªèªæžãïŒ
ã€ã³ã¿ãŒãã§ã€ã¹ã®äœ¿çšã¯çè§£ããããææ³ã§ããããã¹ãã§ãã¹ãããããæ¡åŒµããããã³ãŒããäœæã§ããŸãã ãããæã匷åãªã¢ãŒããã¯ãã£èšèšããŒã«ã§ãããšç¹°ãè¿ã確信ããŠããŸãã
ãã®èšäºã®ç®çã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãšã¯äœããããããã©ã®ããã«äœ¿çšããããããããŠããããã©ã®ããã«ã³ãŒãã®æ¡åŒµæ§ãšãã¹ãå®¹ææ§ãæäŸãããã説æããããšã§ãã æåŸã«ããã®èšäºã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ããœãããŠã§ã¢é
信管çãæé©åããèšç»ãç°¡çŽ åããæ¹æ³ã瀺ãå¿
èŠããããŸã
ã€ã³ã¿ãŒãã§ãŒã¹ã€ã³ã¿ãŒãã§ã€ã¹ã¯å¥çŽãèšè¿°ããŸãã èšèªãŸãã¯ãã¬ãŒã ã¯ãŒã¯ã«å¿ããŠãã€ã³ã¿ãŒãã§ãŒã¹ã®äœ¿çšã¯æç€ºçãŸãã¯æé»çã«æç€ºãããå ŽåããããŸãã ãããã£ãŠãGoèšèªã§ã¯ã
ã€ã³ã¿ãŒãã§ã€ã¹ã¯æç€ºçã«æç€ºãããŸã ã ãšã³ãã£ãã£ãã€ã³ã¿ãŒãã§ã€ã¹ãšããŠäœ¿çšããããšãããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã®ã«ãŒã«ãšå®å
šã«äžèŽããªãå Žåãã³ã³ãã€ã«æãšã©ãŒãçºçããŸãã ããšãã°ãäžèšã®äŸã«ç¶ããŠã次ã®ãšã©ãŒã衚瀺ãããŸãã
prog.go:22:85: cannot use BadPricer literal (type BadPricer) as type StockPricer in argument to isPricerHigherThan100: BadPricer does not implement StockPricer (missing CurrentPrice method) Program exited.
ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãåŒã³åºãå
ãåŒã³åºãå
ããåãé¢ãã®ã«åœ¹ç«ã€ããŒã«ã§ããããã¯ãã³ã³ãã©ã¯ãã䜿çšããŠè¡ãããŸãã
èªå亀æååŒã®ããã°ã©ã ã®äŸã䜿çšããŠããã®åé¡ãç¹å®ããŸãããã ãã¬ãŒããŒããã°ã©ã ã¯ãèšå®ããã賌å
¥äŸ¡æ Œãšãã£ãã«ãŒã·ã³ãã«ã§åŒã³åºãããŸãã ãã®åŸãããã°ã©ã ã¯ååŒæã«è¡ãããã®ãã£ãã«ãŒã®çŸåšã®çžå ŽãèŠã€ããŸãã ããã«ããã®ãã£ãã«ãŒã®è³Œå
¥äŸ¡æ Œãèšå®äŸ¡æ Œãè¶
ããªãå Žåãããã°ã©ã ã¯è³Œå
¥ãè¡ããŸãã

ç°¡ç¥åãã圢åŒã§ã¯ããã®ããã°ã©ã ã®ã¢ãŒããã¯ãã£ã¯æ¬¡ã®ããã«è¡šãããšãã§ããŸãã äžèšã®äŸãããçŸåšã®äŸ¡æ ŒãååŸããæäœã¯ãããã°ã©ã ã亀æãµãŒãã¹ã«æ¥ç¶ããããã®HTTPãããã³ã«ã«çŽæ¥äŸåããããšãæããã§ãã
Action
ã®ç¶æ
ãHTTPã«çŽæ¥äŸåããŠããŸãã ãããã£ãŠãäž¡æ¹ã®ç¶æ
ã¯ãHTTPã䜿çšããŠäº€æããŒã¿ãæœåºããæ¹æ³ããã©ã³ã¶ã¯ã·ã§ã³ãå®äºããæ¹æ³ãå®å
šã«çè§£ããå¿
èŠããããŸãã
å®è£
ã¯æ¬¡ã®ããã«ãªããŸãã
func analyze(ticker string, maxTradePrice float64) (bool, err) { resp, err := http.Get( "http://stock-service.com/currentprice/" + ticker ) if err != nil {
ããã§ã¯ãåŒã³åºãå
ïŒ
analyze
ïŒã¯HTTPã«çŽæ¥äŸåããŠããŸãã 圌女ã¯ãHTTPèŠæ±ãã©ã®ããã«å®åŒåãããããç¥ãå¿
èŠããããŸãã è§£æã¯ã©ã®ããã«è¡ãããŸããã å詊è¡ãã¿ã€ã ã¢ãŠããèªèšŒãªã©ã®åŠçæ¹æ³ 圌女ã¯
http
ãã
çè§£ããŠã
http
ã
analyzeãåŒã³åºããã³ã«ã http
ã©ã€ãã©ãªãåŒã³åºãå¿
èŠããããŸã ã
ããã§ã€ã³ã¿ãŒãã§ã€ã¹ã¯ã©ã®ããã«åœ¹ç«ã¡ãŸããïŒ ã€ã³ã¿ãŒãã§ã€ã¹ã«ãã£ãŠæäŸãããã³ã³ãã©ã¯ãã§ã¯ãç¹å®ã®
å®è£
ã§ã¯ãªãã
åäœã説æã§ããŸãã
type StockExchange interface { CurrentPrice(ticker string) float64 }
äžèšã¯ã
StockExchange
ã®æŠå¿µãå®çŸ©ããŠããŸãã ããã§ã¯ã
StockExchange
ãå¯äžã®
CurrentPrice
颿°ã®åŒã³åºãããµããŒãããŠãããšè¿°ã¹ãŠããŸãã ãããã®3è¡ã¯ãç§ã«ãšã£ãŠæã匷åãªå»ºç¯æè¡ã®ããã§ãã ã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ãããèªä¿¡ãæã£ãŠå¶åŸ¡ããã®ã«åœ¹ç«ã¡ãŸãã ãã¹ããæäŸããŸãã æ¡åŒµæ§ãæäŸããŸãã
äŸåæ§æ³šå
¥ã€ã³ã¿ãŒãã§ã€ã¹ã®äŸ¡å€ãå®å
šã«çè§£ããã«ã¯ããäŸåæ§æ³šå
¥ããšåŒã°ããææ³ãç¿åŸããå¿
èŠããããŸãã
äŸåæ§æ³šå
¥ãšã¯ãåŒã³åºãåŽãåŒã³åºãåŽãå¿
èŠãšãããã®ãæäŸããããšãæå³ããŸãã éåžžãããã¯æ¬¡ã®ããã«ãªããŸããåŒã³åºãå
ã¯ãªããžã§ã¯ããæ§æããåŒã³åºãå
ã«æž¡ããŸãã æ¬¡ã«ãçä¿¡åŽãæ§æãšå®è£
ããæœè±¡åããŸãã ãã®å Žåãæ¢ç¥ã®èª¿åããããŸãã HTTP RestãµãŒãã¹ãžã®ãªã¯ãšã¹ããæ€èšããŠãã ããã ã¯ã©ã€ã¢ã³ããå®è£
ããã«ã¯ãHTTPèŠæ±ãäœæãéä¿¡ãåä¿¡ã§ããHTTPã©ã€ãã©ãªã䜿çšããå¿
èŠããããŸãã
HTTPèŠæ±ãã€ã³ã¿ãŒãã§ã€ã¹ã®èåŸã«é
眮ããå ŽåãåŒã³åºãå
ã¯åãé¢ãããå¯èœæ§ããããHTTPèŠæ±ãå®éã«è¡ãããããšããç¥ããªããããšã«ãªããŸãã
åŒã³åºãå
ã¯ãäžè¬çãªé¢æ°åŒã³åºãã®ã¿ãè¡ãå¿
èŠããããŸãã ããã¯ãããŒã«ã«ã³ãŒã«ããªã¢ãŒãã³ãŒã«ãHTTPã³ãŒã«ãRPCã³ãŒã«ãªã©ã§ãã çºä¿¡è
ã¯ãäœãèµ·ãã£ãŠããã®ããç¥ãããéåžžãæåŸ
ãããçµæãåŸããããŸã§å®ç§ã«åœŒå¥³ã«åã£ãŠããŸãã 以äžã¯ã
analyze
ã¡ãœããã§äŸåæ§æ³šå
¥ãã©ã®ããã«èŠãããã瀺ããŠããŸãã
func analyze(se StockExchange, ticker string, maxTradePrice float64) (bool, error) { currentPrice := se.CurrentPrice(ticker) var hasTraded bool var err error if currentPrice <= maximumTradePrice { err = doTrade(ticker, currentPrice) if err == nil { hasTraded = true } } return hasTraded, err }
ããã§èµ·ãã£ãŠããããšã«é©ããããããšã¯ãããŸããã äŸåé¢ä¿ããªãŒãå®å
šã«å転ããããã°ã©ã å
šäœãããé©åã«å¶åŸ¡ãå§ããŸããã ããã«ãèŠèŠçã«ãå®è£
å
šäœãããã¯ãªãŒã³ã§çè§£ãããããªããŸããã åææ¹æ³ãçŸåšã®äŸ¡æ Œãéžæãããã®äŸ¡æ Œãç§ãã¡ã«é©ããŠãããã©ããã確èªããããã§ããå Žåã¯ååŒãè¡ãå¿
èŠãããããšãæç¢ºã«ç¢ºèªããŸãã
æãéèŠãªããšã¯ããã®å ŽåãåŒã³åºãå
ããåŒã³åºãå
ãåãé¢ããŸãã åŒã³åºãå
ãšå®è£
å
šäœã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠåŒã³åºããããã®ããåé¢ãããŠãããããããŸããŸãªå®è£
ãäœæããŠã€ã³ã¿ãŒãã§ã€ã¹ãæ¡åŒµã§ããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšãããšãçä¿¡åŽã®ã³ãŒãã倿ŽããããšãªããããŸããŸãªç¹å®ã®å®è£
ãäœæã§ããŸãã

ãã®ããã°ã©ã ã®ãçŸåšã®äŸ¡æ ŒãååŸãã¹ããŒã¿ã¹ã¯ã
StockExchange
ã€ã³ã¿ãŒãã§ãŒã¹ã®ã¿ã«äŸåããŸãã ãã®å®è£
ã¯ã亀æãµãŒãã¹ãžã®é£çµ¡æ¹æ³ãäŸ¡æ Œã®ä¿åæ¹æ³ããŸãã¯ãªã¯ãšã¹ãã®äœææ¹æ³ã«ã€ããŠ
äœãç¥ããŸããã æ¬åœã«è³çŠã®ç¡ç¥ã ããã«ãäºåœéã
HTTPStockExchange
å®è£
ãåæã«ã€ããŠäœãç¥ããŸããã 課é¡ã鿥çã§ãããããåæãå®è¡ããããšãã«ãåæãå®è¡ãããã³ã³ããã¹ãã«ã€ããŠã
ç¹å®ã®å®è£
ã倿Ž/远å /åé€ããå Žåãããã°ã©ã ãã©ã°ã¡ã³ãïŒã€ã³ã¿ãŒãã§ã€ã¹ã«äŸåãããã®ïŒã倿Žããå¿
èŠããªãããã
ãã®ãããªèšèšã¯èä¹
æ§ããããŸãã
StockService
éåžžã«é »ç¹ã«å©çšã§ããªãããšã
StockService
ãŸãã
äžèšã®äŸã¯é¢æ°ã®åŒã³åºããšã©ã®ããã«éããŸããïŒ é¢æ°åŒã³åºãã䜿çšãããšãå®è£
ãããã¯ãªãŒã³ã«ãªããŸãã éãã¯ã颿°ãåŒã³åºããšãã«ãHTTPã«é Œããªããã°ãªããªãããšã§ãã
analyze
ã¡ãœããã¯ã
http
èªäœãçŽæ¥åŒã³åºãã®ã§ã¯ãªããåã«
http
ãåŒã³åºãå¿
èŠããã颿°ã®ã¿ã¹ã¯ãå§ä»»ããŸãã ãã®ææ³ã®åŒ·ã¿ã¯ããæ³šå
¥ããã€ãŸãåŒã³åºãå
ãåŒã³åºãå
ã«ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããããšã«ãããŸãã ããã¯ãäŸåé¢ä¿ã®å転ãçºçããæ¹æ³ãšãŸã£ããåãã§ãããã®å ŽåãååŸäŸ¡æ Œã¯å®è£
ã«äŸåãããã€ã³ã¿ãŒãã§ã€ã¹ã«ã®ã¿äŸåããŸãã
ããã«äœ¿ããè€æ°ã®å®è£
ãã®æ®µéã§ã¯ã
analyze
颿°ãš
StockExchange
ã€ã³ã¿ãŒãã§ã€ã¹ããããŸãããå®éã«ã¯äŸ¿å©ãªããšã¯äœãã§ããŸããã ããã°ã©ã ãçºè¡šããŸããã çŸæç¹ã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã®èŠä»¶ãæºããåäžã®ç¹å®ã®å®è£
ããªãããããããåŒã³åºãããšã¯ã§ããŸããã
次ã®å³ã®äž»ãªåŒ·èª¿ç¹ã¯ããçŸåšã®äŸ¡æ Œã®ååŸãç¶æ
ãš
StockExchange
ã€ã³ã¿ãŒãã§ãŒã¹ãžã®äŸåã§ãã 以äžã¯ã2ã€ã®å®å
šã«ç°ãªãå®è£
ãå
±åããçŸåšã®äŸ¡æ ŒãååŸããæ¹æ³ãäžæã§ããããšã瀺ããŠããŸãã ããã«ãäž¡æ¹ã®å®è£
ã¯çžäºã«é¢é£ããŠããããããããã¯
StockExchange
ã€ã³ã¿ãŒãã§ãŒã¹ã®ã¿ã«äŸåããŠ
StockExchange
ãŸãã

çç£
å
ã®HTTPå®è£
ã¯ããã©ã€ããª
analyze
å®è£
ã«ãã§ã«ååšããŸãã ãããæœåºããŠãã€ã³ã¿ãŒãã§ãŒã¹ã®ç¹å®ã®å®è£
ã®èåŸã«ã«ãã»ã«åããã ãã§ãã
type HTTPStockExchange struct {} func (se HTTPStockExchange) CurrentPrice(ticker string) float64 { resp, err := http.Get( "http://stock-service.com/currentprice/" + ticker ) if err != nil {
以åã«é¢æ°analyzeã«ãªã³ã¯ããŠããã³ãŒãã¯èªåŸåã«ãªãã
StockExchange
ã€ã³ã¿ãŒãã§ã€ã¹ãæºãããŸããã€ãŸãã
analyze
æž¡ãããšãã§ããããã«ãªããŸããã äžèšã®å³ããèŠããŠããããã«ãanalyzeã¯HTTPäŸåé¢ä¿ã«é¢é£ä»ããããªããªããŸããã ã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããŠã
analyze
ã¯èå°è£ã§äœãèµ·ãããããæ³åãããŸããã 圌ã¯ã
CurrentPrice
ãåŒã³åºãããšãã§ãããªããžã§ã¯ããäžããããããšãä¿èšŒãããããšã ããç¥ã£ãŠããŸãã
ãŸããããã§ã¯ã«ãã»ã«åã®å
žåçãªé·æãå©çšããŠããŸãã 以åã¯ãhttpãªã¯ãšã¹ããåæã«çµã³ä»ããããŠããå Žåãhttpãä»ããŠååŒæãšéä¿¡ããå¯äžã®æ¹æ³ã¯ã
analyze
ã¡ãœãããä»ããŠéæ¥çã§ããã ã¯ãããããã®åŒã³åºãã颿°ã«ã«ãã»ã«åãã颿°ãç¬ç«ããŠå®è¡ã§ããŸãããã€ã³ã¿ãŒãã§ã€ã¹ã«ãããåŒã³åºãå
ããåŒã³åºãå
ãåãé¢ãå¿
èŠããããŸãã ããã§ãåŒã³åºãå
ã«é¢ä¿ãªã
HTTPStockExchange
ããã¹ãã§ããŸãã ããã¯ããã¹ãã®ç¯å²ãšããã¹ãã®å€±æãçè§£ããŠå¯Ÿå¿ããæ¹æ³ã«æ ¹æ¬çã«åœ±é¿ããŸãã
ãã¹ãäžæ¢åã®ã³ãŒãã«ã¯ã
HTTPStockService
æ§é ããããŸããããã«ãããExchangeãµãŒãã¹ãšéä¿¡ãã
HTTPStockService
åä¿¡ããå¿çãè§£æã§ããããšãåå¥ã«ç¢ºèªã§ããŸãã ããããä»åºŠã¯ãanalyzeã
StockExchange
ã€ã³ã¿ãŒãã§ãŒã¹ããã®å¿çãæ£ããåŠçã§ããããšãããã«ããã®æäœãä¿¡é Œã§ããåçŸå¯èœã§ããããšã確èªããŸãããã
currentPrice := se.CurrentPrice(ticker) if currentPrice <= maxTradePrice { err := doTrade(ticker, currentPrice) }
HTTPã䜿çšããå®è£
ã䜿çšã§ããŸãããå€ãã®æ¬ ç¹ããããŸãã ãŠããããã¹ãã§ãããã¯ãŒã¯åŒã³åºããè¡ããšãç¹ã«å€éšãµãŒãã¹ã®å Žåã¯é
ããªãå ŽåããããŸãã é
å»¶ãšäžå®å®ãªãããã¯ãŒã¯æ¥ç¶ã®ããã«ããã¹ãã¯ä¿¡é Œã§ããªãããšã倿ããå¯èœæ§ããããŸãã ããã«ããã©ã³ã¶ã¯ã·ã§ã³ãå®äºã§ããã¹ããŒãã¡ã³ãã䜿çšãããã¹ããããã³ãã©ã³ã¶ã¯ã·ã§ã³ãçµäºãã¹ãã§ãªãã±ãŒã¹ãé€å€ã§ããã¹ããŒãã¡ã³ãã䜿çšãããã¹ããå¿
èŠãªå Žåããããã®äž¡æ¹ã確å®ã«æºããå®éã®æ¬çªããŒã¿ãèŠã€ããããšã¯å°é£ã§ãæ¡ä»¶ã
maxTradePrice
éžæããããšãã§ããŸããããšãã°ã
maxTradePrice := -100
å Žåããã®æ¡ä»¶ã§åæ¡ä»¶ã人çºçã«æš¡å£ããŸãããã©ã³ã¶ã¯ã·ã§ã³ã¯å®äºããã
maxTradePrice := 10000000
ã¯æããã«ãã©ã³ã¶ã¯ã·ã§ã³ã§çµäºããŸãã
ãããã亀æãµãŒãã¹ã§ç¹å®ã®ã¯ã©ãŒã¿ãååŸãããšã©ããªããŸããïŒ ãŸãã¯ãã¢ã¯ã»ã¹æéãæ¯æãå¿
èŠãããå Žå åäœãã¹ãã«é¢ããŠã¯ãã¯ã©ãŒã¿ãå®éã«æ¯æããã䜿ãã¹ãã§ããããïŒ çæ³çã«ã¯ããã¹ãã¯ã§ããã ãé »ç¹ã«å®è¡ããå¿
èŠããããŸãããã®ããããã¹ãã¯é«éã§ãå®äŸ¡ã§ãä¿¡é Œã§ãããã®ã§ãªããã°ãªããŸããã ãã®æ®µèœãããçŽç²ãªHTTPãåããããŒãžã§ã³ã䜿çšããããšããã¹ãã®èгç¹ããéåççã§ããçç±ã¯æããã ãšæããŸãïŒ
ããè¯ãæ¹æ³ããããã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããå¿
èŠããããŸãïŒã€ã³ã¿ãŒãã§ãŒã¹ãããã°ã
StockExchange
å®è£
ãæ
éã«è£œé ã§ããŸããããã«ãããè¿
éãå®å
šã確å®ã«
analyze
ããããšãã§ããŸãã
type StubExchange struct { Price float64 } func (se StubExchange) CurrentPrice(ticker string) float64 { return se.Price } func TestAnalyze_MakeTrade(t *testing.T) { se := StubExchange{Price: 10} maxTradePrice := 11 traded, err := analyze(se, "TSLA", maxTradePrice) if err != nil { t.Errorf("expected err == nil received: %s", err) } if !traded { t.Error("expected traded == true") } } func TestAnalyze_DontTrade(t *testing.T) { se := StubExchange{Price: 10} maxTradePrice := 9 traded, err := analyze(se, "TSLA", maxTradePrice)
亀æãµãŒãã¹ã®ã¹ã¿ããäžèšã§äœ¿çšãããŠãã
analyze
ã
analyze
ãšãªããã©ã³ããèµ·åãããŸãã æ¬¡ã«ãåæãå¿
èŠãªããšãå®è¡ããããšã確èªããããã«ãåãã¹ãã§ã¹ããŒãã¡ã³ããäœæãããŸãã ããã¯ãã¹ãããã°ã©ã ã§ãããç§ã®çµéšã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ãã»ãŒãã®ããã«äœ¿çšãããã³ã³ããŒãã³ã/ã¢ãŒããã¯ãã£ã¯ãããã«ã³ãŒãã®èä¹
æ§ã«ã€ããŠããã®æ¹æ³ã§ãã¹ããããããšã瀺åããŠããŸã!!! ã€ã³ã¿ãŒãã§ãŒã¹ã®ãããã§ãã¡ã¢ãªå¶åŸ¡ã®
StockExchange
䜿çšã§ããŸããããã¯ãä¿¡é Œæ§ãé«ããèšå®ã容æã§ãçè§£ãããããåçŸæ§ããããè¶
é«éã®ãã¹ããæäŸããŸã!!!
åºå®è§£é€-çºä¿¡è
èšå®ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠåŒã³åºãå
ãåŒã³åºãå
ããåãé¢ãæ¹æ³ãããã³è€æ°ã®å®è£
ãè¡ãæ¹æ³ã«ã€ããŠèª¬æããã®ã§ãéèŠãªç¹ã«ã€ããŠã¯ãŸã è§ŠããŠããŸããã å³å¯ã«å®çŸ©ãããæéã«ç¹å®ã®å®è£
ãæ§æããã³æäŸããæ¹æ³ã¯ïŒ åæé¢æ°ãçŽæ¥åŒã³åºãããšãã§ããŸãããå®çšŒåæ§æã§äœãããå¿
èŠããããŸããïŒ
ããã¯ãäŸåé¢ä¿ã®å®è£
ã圹ç«ã€å Žæã§ãã
func main() { var ticker = flag.String("ticker", "", "stock ticker symbol to trade for") var maxTradePrice = flag.Float64("maxtradeprice", "", "max price to pay for a share of the ticker symbol." se := HTTPStockExchange{} analyze(se, *ticker, *maxTradePrice) }
ãã¹ãã±ãŒã¹ãšåæ§ã«ã
analyze
ã§äœ¿çšãããStockExchangeã®å
·äœçãªå®è£
ã¯ãanalyze以å€ã®åŒã³åºãå
ã«ãã£ãŠæ§æãããŸãã æ¬¡ã«ã
analyze
æž¡ãããŸãïŒæ³šå
¥ãããŸãïŒã ããã«ããã
HTTPStockExchange
ã©ã®ããã«æ§æãããŠãããã«ã€ããŠNOTHINGãåæãããŠãã
HTTPStockExchange
ãŸãã ãããããã³ãã³ãã©ã€ã³ãã©ã°ãšããŠäœ¿çšããhttpãã¡ã€ã³ãæäŸãããã®ã§ãanalyzeã倿Žããå¿
èŠã¯ãããŸããã ãŸãã¯ãç°å¢ããæœåºããã
HTTPStockExchange
ã«ã¢ã¯ã»ã¹ããããã«äœããã®èªèšŒãŸãã¯ããŒã¯ã³ãæäŸããå¿
èŠãããå Žåã¯ã©ãã§ããããïŒ ç¹°ãè¿ããŸãããåæã¯å€æŽããªãã§ãã ããã
èšå®ã¯
analyze
以å€ã®ã¬ãã«ã§è¡ããã
analyze
ãanalyzeã¯ç¬èªã®äŸåé¢ä¿ãèšå®ããå¿
èŠããããŸããã ãããã£ãŠãè·åã®å³å¯ãªåé¢ãéæãããŸãã
æ£ã®æ±ºå®ããããäžèšã®äŸã§ååã§ãããã€ã³ã¿ãŒãã§ãŒã¹ãäŸåæ§æ³šå
¥ã«ã¯ä»ã«ãå€ãã®å©ç¹ããããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ã«ãããç¹å®ã®å®è£
ã«é¢ããæ±ºå®ãå»¶æããããšãã§ããŸãã æ±ºå®ã«ã¯ããµããŒãããåäœã決å®ããå¿
èŠããããŸãããç¹å®ã®å®è£
ã«ã€ããŠã¯åŸã§æ±ºå®ã§ããŸãã èªåãã©ã³ã¶ã¯ã·ã§ã³ãè¡ããããšæã£ãŠããããã©ã®èŠç©ãããã€ãã䜿çšããããŸã ããããªãã£ããšããŸãã ããŒã¿ãŠã§ã¢ããŠã¹ã䜿çšããå Žåãåæ§ã®ã¯ã©ã¹ã®ãœãªã¥ãŒã·ã§ã³ãåžžã«æ±ãããŸãã ç§ãã¡ã®ããã°ã©ã ã¯äœã䜿ãã¹ãã§ããïŒmysqlãpostgresãredisããã¡ã€ã«ã·ã¹ãã ãcassandraïŒ æçµçã«ãããã¯ãã¹ãŠå®è£
ã®è©³çްã§ãããã€ã³ã¿ãŒãã§ã€ã¹ã«ããããããã®åé¡ã«é¢ããæçµæ±ºå®ãå»¶æã§ããŸãã ããã«ãããããã°ã©ã ã®ããžãã¹ããžãã¯ãéçºããæåŸã«ç¹å®ã®æè¡ãœãªã¥ãŒã·ã§ã³ã«åãæ¿ããããšãã§ããŸãïŒ
ãã®ææ³ã ãã§ãå€ãã®å¯èœæ§ãæ®ãããŠãããšããäºå®ã«ããããããããããžã§ã¯ãèšç»ã®ã¬ãã«ã§äœãäžæè°ãªããšãèµ·ãããŸãã Exchangeã€ã³ã¿ãŒãã§ã€ã¹ã«å¥ã®äŸåé¢ä¿ã远å ãããšã©ããªããæ³åããŠã¿ãŠãã ããã

ããã§ã¯ãéåŸªç°æåã°ã©ãã®åœ¢åŒã§ã¢ãŒããã¯ãã£ãåæ§æããŸããããã«ããã亀æã€ã³ã¿ãŒãã§ã€ã¹ã®è©³çްã«åæãããšããã«ã
HTTPStockExchange
ã䜿çšããŠããã€ãã©ã€ã³ã
HTTPStockExchange
ãç¶ããããšãã§ããŸãã ç§ãã¡ã¯ããããžã§ã¯ãã«æ°ãã人ã远å ããããšã§ãããéãåãããšãã§ããç¶æ³ãäœãåºããŸããã ãã®ããã«ã¢ãŒããã¯ãã£ã埮調æŽããããšã§ããããžã§ã¯ãå
šäœã®é
ä¿¡ãä¿é²ããããã«ããããžã§ã¯ãã«è¿œå ã®äººãã©ãã§ããã€ãã©ã®ãããã®æéåŸäºãããããšãã§ããããããããææ¡ã§ããŸãã ããã«ãã€ã³ã¿ãŒãã§ã€ã¹éã®æ¥ç¶ã匱ããããéåžžãå®è£
ã€ã³ã¿ãŒãã§ã€ã¹ããå§ããŠäœæ¥ã«åå ããã®ã¯ç°¡åã§ãã ããã°ã©ã ãšã¯å®å
šã«ç¬ç«ããŠã
HTTPStockExchange
éçºããã¹ãããã¹ãã§ããŸãïŒ
ã¢ãŒããã¯ãã£ã®äŸåé¢ä¿ãåæãããããã®äŸåé¢ä¿ã«åºã¥ããŠèšç»ããããšã§ããããžã§ã¯ãã倧å¹
ã«å éã§ããŸãã ãã®ç¹å®ã®ææ³ã䜿çšããŠãæ°ãæéå²ãåœãŠããããããžã§ã¯ããéåžžã«è¿
éã«å®äºããããšãã§ããŸããã
å
ã«ããã§ãã€ã³ã¿ãŒãã§ã€ã¹ãšäŸåé¢ä¿ã®æ³šå
¥ã«ãããèšèšãããããã°ã©ã ã®èä¹
æ§ãã©ã®ããã«ä¿èšŒãããããããæç¢ºã«ãªããŸãã èŠç©ãããã€ããŒã倿Žããããã¯ã©ãŒã¿ã®ã¹ããªãŒãã³ã°ãéå§ããŠãªã¢ã«ã¿ã€ã ã§ä¿åãããšããŸãã ããªãã奜ããªã ãä»ã®å€ãã®å¯èœæ§ããããŸãã çŸåšã®åœ¢åŒã®analyzeã¡ãœããã¯ã
StockExchange
ã€ã³ã¿ãŒãã§ã€ã¹ãšã®çµ±åã«é©ããå®è£
ããµããŒãããŸãã
se.CurrentPrice(ticker)
ãããã£ãŠãå€ãã®å Žåã倿Žããã«å®è¡ã§ããŸãã ãã¹ãŠã§ã¯ãããŸããããç§ãã¡ãééããå¯èœæ§ã®ããäºæž¬å¯èœãªã±ãŒã¹ã§ã¯ã
analyze
ã³ãŒãã倿Žãããã®äž»èŠæ©èœãå確èª
analyze
å¿
èŠæ§ããå
ããã ãã§ãªããæ°ããå®è£
ãç°¡åã«æäŸãããããµãã©ã€ã€ãåãæ¿ãããããããšãã§ããŸãã ãŸãã
analyze
ã倿Žãããããã«ãã§ãã¯ãããããããšãªãããã§ã«ããç¹å®ã®å®è£
ãã¹ã ãŒãºã«æ¡åŒµãŸãã¯æŽæ°ã§ããŸãïŒ
äžèšã®äŸããã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠããã°ã©ã å
ã®ãšã³ãã£ãã£éã®æ¥ç¶ã匱ãããšãäŸåé¢ä¿ãå®å
šã«åæ§ç¯ãããåŒã³åºãå
ãšåŒã³åºãå
ãåé¢ãããããšãçŽåŸã§ããããã«ç€ºããŠãããããšãæåŸ
ããŠããŸãã ãã®åé¢ã®ãããã§ãããã°ã©ã ã¯ç¹å®ã®å®è£
ã«äŸåããŸããããç¹å®ã®
åäœã«å€§ããäŸåã
ãŸã ã ãã®åäœã¯ãããŸããŸãªå®è£
ã§æäŸã§ããŸãã ãã®éèŠãªèšèšååã¯ã
ã«ã¢ã¿ã€ãã³ã°ãšãåŒã°ã
ãŸã ã
ã€ã³ã¿ãŒãã§ãŒã¹ãšããæŠå¿µãšãå®è£
ã§ã¯ãªãæ¯ãèããžã®äŸåã¯éåžžã«åŒ·åãªã®ã§ãã€ã³ã¿ãŒãã§ãŒã¹ãèšèªããªããã£ããšèŠãªããŸã-ã¯ããããã¯éåžžã«æ¥é²çã§ãã äžèšã®äŸãéåžžã«èª¬åŸåã®ãããã®ã«ãªãããããžã§ã¯ãã®æåããã€ã³ã¿ãŒãã§ãŒã¹ãšäŸåé¢ä¿ã®æ³šå
¥ã䜿çšããããšã«åæããããšãé¡ã£ãŠããŸãã ç§ãåãçµãã ã»ãšãã©ãã¹ãŠã®ãããžã§ã¯ãã§ã¯ã1ã€ã§ã¯ãªããå°ãªããšã2ã€ã®å®è£
ïŒå®çšŒåçšãšãã¹ãçšïŒãå¿
èŠã§ããã