å 容ïŒGoãåŠç¿ããããã«ãPythonããGoã«å°ããªãµã€ãã«ããã¯ãšã³ãã移æ€ãããã®éçšã§æ¥œã§çã¿ã®ãªãçµéšãåŸãŸããã
ãã°ããã®éGoã®åŠç¿ãéå§ãããã£ãã®ã§ããããã®å²åŠãæ°ã«å ¥ã£ãŠããŸãããå°ããªèšèªãããŠããªåŠç¿æ²ç·ãéåžžã«é«éãªã³ã³ãã€ã«ïŒéçã«åä»ããããèšèªãªã©ïŒã§ãã æçµçã«ããã«äžæ©é²ãã§åœŒã«æãå§ããã®ã¯ãç¹ã«æè¿äœ¿çšãããã®ãããGo- Dockerãšngrokã§æžãããããéããŠæ·±å»ãªããã°ã©ã ãå¢ããŠããããšã§ãã
Goã®å²åŠã¯ããã¹ãŠã®äººã®å¥œã¿ã§ã¯ãããŸããïŒäŸå€ã¯ãããŸãããç¬èªã®ãžã§ããªãã¯ãªã©ãäœæããããšã¯ã§ããŸããïŒããç§ã®ç²Ÿç¥ã¢ãã«ã«ããŸãé©åããŠããŸãã ã·ã³ãã«ã§é«éãæçœãªæ¹æ³ã§ç©äºãè¡ãã ããŒãã£ã³ã°äžãæšæºã©ã€ãã©ãªãšããŒã«ãã©ãã ãå å®ããŠãããã«ç¹ã«æéãåããŸããã
移æ€
Goã§20è¡ã®ã¹ã¯ãªãããããã€ãäœæããŸããããèšèªãšãšã³ã·ã¹ãã ãç解ããã«ã¯ååã§ã¯ãããŸããã§ããã ãã®ããããã倧ããªãããžã§ã¯ããæ¡çšããããšã«ãããµã€ãGiftyWeddings.comã®ããã¯ãšã³ãã移æ€ããããšã«ããŸãã ã
Pythonã§ã¯ãFlaskãWTFormsãPeeweeãSQLiteãããã³S3ãç»åã®ãµã€ãºå€æŽãªã©ã®ããã®ä»ã®ããã€ãã®ã©ã€ãã©ãªã䜿çšããŠãçŽ1300è¡ã®ã³ãŒãã§ããã
GoããŒãžã§ã³ã§ã¯ãèšèªããããããã¹ã¿ãŒããæšæºã©ã€ãã©ãªã§å¯èœãªéãæ©èœããããã«ãã§ããã ãå°ãªãå€éšäŸåé¢ä¿ã䜿çšãããã£ãã®ã§ãã ç¹ã«ãGoã«ã¯HTTPãæäœããããã®åªããã©ã€ãã©ãªããããä»ã®ãšããWebãã¬ãŒã ã¯ãŒã¯ããŸã£ããæ€èšããªãããšã«ããŸããã ããããç§ã¯ãŸã S3ãStripeãSQLiteã®ããã€ãã®ãµãŒãããŒãã£ã©ã€ãã©ãªã䜿çšãããã¹ã¯ãŒããæäœããåçã®ãµã€ãºãå€æŽããŸããã
Goã®éçåä»ããšã䜿çšããã©ã€ãã©ãªã®æ°ãå°ãªããããã³ãŒãã¯å ã®2å以äžã«ãªããšäºæ³ããŸããã ããããçµæã¯1900è¡ã§ããïŒPythonã®1300è¡ã®çŽ50ïŒ ïŒã
移æ€ããã»ã¹èªäœã¯éåžžã«ã¹ã ãŒãºã«é²ã¿ãã»ãšãã©ã®ããžãã¹ããžãã¯ã¯ãPythonããGoã«ã³ãŒããè¡ããè¡ã«å€æããããšã§ã»ãŒæ©æ¢°çã«ç§»æ€ãããŸããã Pythonã®æŠå¿µãthings[:20]
ã¹ã©ã€ã¹æ§æã«è³ããŸã§ãGoã«ã©ãã ãããŸã翻蚳ãããŠãããã«é©ããŸããã
ãŸããFlaskã䜿çšããå±éºãªã©ã€ãã©ãªã®äžéšã移æ€ãããããGoããŒãžã§ã³ãžã®ç§»è¡äžã«PythonãµãŒãã¹ããã»ãã·ã§ã³Cookieãééçã«ãã³ãŒãã§ããŸããã æå·åãå§çž®ãã·ãªã¢ã«åã®ãã¹ãŠã®ã³ãŒãã¯æšæºã©ã€ãã©ãªã«ãããç°¡åãªããã»ã¹ã§ããã
äžè¬ã«ã Go Tour ã Effective Goãããã³ã€ã³ã¿ãŒãããäžã®ããŸããŸãªã³ãŒãäŸãèŠãéãèšèªãåŠç¿ããããã»ã¹ã¯èŠåŽããŸããã§ããã ããã¥ã¡ã³ãã¯ããªãçãã§ãããéåžžã«ããæžãããŠããŸãã
èšèªããŒã«ãéåžžã«æºè¶³ããŠããŸããã³ãŒãã®æ§ç¯ãå®è¡ããã©ãŒããããããã³ãã¹ãã«å¿
èŠãªãã®ã¯ãã¹ãŠã go
ãµãã³ãã³ããä»ããŠå©çšã§ããŸãã éçºäžã«ã go run *.go
ã䜿çšããŠãªã³ã¶ãã©ã€ã§ã³ã³ãã€ã«ãããµãŒããŒãèµ·åããŸããã ç·šéãšèµ·åã«ã¯çŽ1ç§ããããŸãããããã¯ãScalaã§ã®20ç§ã®å¢åãš20åã®å®å
šãªç·šéããã®å£ã®æŠãã®åŸã®æ°é®®ãªç©ºæ°ã§ããã
ãã¹ãäž
Goæšæºã©ã€ãã©ãªã«ã¯ãåºæ¬çãªãã¹ãããã±ãŒãžãšã go test
ãæ€çŽ¢ãã³ã³ãã€ã«ãå®è¡ããããã«äœ¿çšã§ãããã¹ãã©ã³ããŒïŒ go test
ïŒãå«ãŸããŠããŸãã ãã®ããã±ãŒãžã¯éåžžã«ç°¡åã§ã·ã³ãã«ã§ããïŒå€ãããå ŽåããããŸãïŒãå¿
èŠã«å¿ããŠãã«ããŒãè¿œå ããã ãã§ãã
åäœãã¹ãã«å ããŠãå®éã®Gifty WeddingsãµãŒããŒã§ã»ããã¢ãããããHTTPãã¹ããå®è¡ãããã¹ãã¹ã¯ãªãããäœæããŸããïŒ testing
ããã±ãŒãžã䜿çšïŒã å€ãPythonãµãŒããŒã§ãã®ãã¹ããèšå®ããçµæãåäžã§ããããšã確èªã§ããããã«ããããã«ãã³ãŒãã®Goã¬ãã«ã§ã¯ãªããHTTPã¬ãã«ã§ãããè¡ããŸããã ããã«ããããµãŒããŒãå€æŽããåã«ãã¹ãŠãæ£åžžã«æ©èœããããšãååã«ç¢ºä¿¡ã§ããŸããã
ãŸãããã¯ã€ãããã¯ã¹ãã¹ããè¡ããŸãããã¹ã¯ãªããã¯å¿çããã§ãã¯ããŸãããCookieããã³ãŒãããCookieã«æ£ããããŒã¿ãå«ãŸããŠããããšããã§ãã¯ããŸãã
ã¬ãžã¹ããªãäœæããŠã®ãããåé€ãããã¹ãã®äŸã次ã«ç€ºããŸãã
func TestDeleteGift(t *testing.T) { client := NewClient(baseURL) response := client.PostJSONOK(t, "/api/create", nil) AssertMatches(t, response["slug"], `temp\d+`) slug := response["slug"].(string) html := client.GetOK(t, "/"+slug, "text/html") _, gifts := ParseRegistryAndGifts(t, html) AssertEqual(t, len(gifts), 3) gift := gifts[0].(map[string]interface{}) giftID := int(gift["id"].(float64)) response = client.PostJSONOK(t, fmt.Sprintf("/api/registries/%s/gifts/%d/delete", slug, giftID), nil) expected := map[string]interface{}{ "id": nil, } AssertDeepEqual(t, response, expected) html = client.GetOK(t, "/"+slug, "text/html") _, gifts = ParseRegistryAndGifts(t, html) AssertEqual(t, len(gifts), 2) }
ã¯ãã¹ã³ã³ãã€ã«
ããã¯éçŸå®çãªã¯ãŒã«ã ãšæããŸã-macOSã§èšããŸãïŒ
$ GOOS=linux GOARCH=amd64 go build
ããã«ãããããã«äœ¿çšã§ããLinuxãã€ããªãMacã§ã³ã³ãã€ã«ãããŸãã ãããŠãã¡ããããããéæ¹åã«è¡ãããšãã§ããWindowsãšã®éã§ã¯ãã¹ã³ã³ãã€ã«ãã§ããŸãã ããã ãã§åäœããŸãã
cgoã¢ãžã¥ãŒã«ïŒSQLiteãªã©ïŒã®ã¯ãã¹ã³ã³ãã€ã«ã¯ãã³ã³ãã€ã«ã®ããã«GCCã®æ£ããããŒãžã§ã³ãã€ã³ã¹ããŒã«ããå¿ èŠããããããå°ãè€éã§ãã-Goãšã¯ç°ãªããããã»ã©ç°¡åã§ã¯ãããŸããã ãã®çµæãLinuxäžã§ãã«ãããããã«æ¬¡ã®ã³ãã³ãã§Dockerã䜿çšããŸããã
$ docker run --rm -it -v ~/go:/go -w /go/src/gifty golang:1.9.1 \ go build -o gifty_linux -v *.go
è¯ãç¹
Goã®æãã¯ãŒã«ãªç¹ã®1ã€ã¯ãæšæºã©ã€ãã©ãªãããŒã«ïŒgoãµãã³ãã³ãïŒãããã«ã¯ãµãŒãããŒãã£ã©ã€ãã©ãªãªã©ããã¹ãŠãå ·äœçã«åŒ·åãããŠããããã«æããããšã§ãã ç§ã®å ãªãæ¬èœã¯ãããã¯éšåçã«ã¯Goã«äŸå€ããªããšããäºå®ã«ãããã®ã§ããããšã©ãŒã®åŠçæ¹æ³ã«ããããçš®ã®ããšã©ãŒåŠçæåãã課ããããŠããããšã瀺ããŠããŸãã
ãããã¯ãŒã¯ããã³HTTPã©ã€ãã©ãªã¯ç¹ã«ã¯ãŒã«ã«èŠããŸãã ãããæ°è¡ã®ã³ãŒãã§net / http WebãµãŒããŒïŒå®çšŒåã¬ãã«ããã³HTTP / 2ãµããŒãä»ãã泚ïŒãå®è¡ã§ããŸãã
æšæºã©ã€ãã©ãªã«ã¯ãhtml / templateãioutil.WriteFileãioutil.TempFileãcrypto / sha1ãencoding / base64ãsmtp.SendMailãzlibãimage / jpegãimage / pngãªã©ãå¿ èŠãªãã®ã®ã»ãšãã©ãå«ãŸããŠããŸãã ã©ã€ãã©ãªAPIã¯éåžžã«ç解ãããããã®ã§ãããäœã¬ãã«APIãããå Žåããããã¯éåžžãæãäžè¬çãªãŠãŒã¹ã±ãŒã¹ã®ããã«é«ã¬ãã«é¢æ°ã«ã©ãããããŠããŸãã
ãã®çµæãGoãã¬ãŒã ã¯ãŒã¯ãªãã§Webããã¯ãšã³ããäœæããããšã¯å€§ããããšã§ã¯ãããŸããã§ããã
éçã«åä»ããããèšèªã§JSONãæäœããã®ãã©ãã»ã©ç°¡åããç§ã¯json.Unmarshal
ãŸãããæ§é äœã«çŽæ¥json.Unmarshal
ãåŒã³åºãã ãã§ããªãã¬ã¯ã·ã§ã³ã䜿çšãããšãæ£ãããã£ãŒã«ãã«èªåçã«å
¥åãããŸãã jsonãã¡ã€ã«ãããµãŒããŒæ§æãããŒãããã®ã¯éåžžã«ç°¡åã§ããã
err = json.Unmarshal(data, &config) if err != nil { log.Fatalf("error parsing config JSON: %v", err) }
ã¡ãªã¿ã«ã errïŒ= Nilã«ã€ããŠ-äžéšã®äººã ãæãã€ãã»ã©ã²ã©ããã®ã§ã¯ãããŸããã§ããïŒç§ã®1900è¡ã®ã³ãŒãã§çŽ70åãã§ãã¯ãè¡ãããŸãïŒã ãŸãããæ¬åœã«ä¿¡é Œæ§ãé«ãããã¹ãŠã®ãšã©ãŒãæ£ããåŠçããŸãããšããéåžžã«è¯ãæããäžããŸãã
ã¡ãªã¿ã«ãåãªã¯ãšã¹ããã³ãã©ãŒã¯ç¬èªã®ãŽã«ãŒãã³ã§æ©èœãããããåžžã«æ©èœããã¯ãã®ããŒã¿ããŒã¹ã³ãŒã«ã®ãããªãã®ã®ããã«panic()
ã³ãŒã«ã䜿çšããŸããã ãããŠãæäžäœã¬ãã«ã§ãç§ã¯recover()
ãããã®ãããã¯ããã£ããããããããæ£ããèšé²ããã¹ã¿ãã¯ãã¬ãŒã¹ãã¡ãŒã«ã«éä¿¡ããã³ãŒããè¿œå ããŸããã
PythonãšFlaskã®åŸãç§ã®æã¯ãNot FoundãŸãã¯Bad Requestå¿çã«ãããã¯ã®ç¹å¥ãªæå³ã䜿çšããã®ãéåžžã«ããããªããŸãããããããã®è¡åãæããããæ £çšçãªGoã®ãã¹ïŒæ£ããæ»ãå€ïŒã«é²ãããšã«ããŸããã
ãŸãããã¹ãŠã®åäžã®åæAPIã«å ããŠãããã¯ã°ã©ãŠã³ããŽã«ãŒãã³ã§å®è¡ããããã®çŽ æŽãããgo
ããŒã¯ãŒããæ°ã«å
¥ã£ãŠããŸãã ããã¯ãPython / CïŒ/ JavaScriptéåæAPIãšã¯å¯Ÿç
§çã§ããããã¯ãåI / Oé¢æ°ã®æ°ããAPIã«ã€ãªãããAPIã®è¡šé¢ã2åã«ããŸãã
time.Parse()
ã®åœ¢åŒã¯ããåºæºæ¥ããšããèãæ¹ã«ã¯å°ã颚å€ããã§ãããå®éã«ã¯ãåŸã§ã³ãŒãã«æ»ã£ããšãã«éåžžã«èªã¿ããããªã£ãŠããŸãïŒãã®ãããäžåºŠãïŒ
bã¯ã©ãããæå³ã§ããïŒãïŒ
context
ã©ã€ãã©ãªãå
¥åããã«ã¯å°ãæéãããããŸãããããªã¯ãšã¹ãåŠçã«é¢äžãããã¹ãŠã®äººã«ããŸããŸãªè¿œå æ
å ±ïŒãŠãŒã¶ãŒã»ãã·ã§ã³ããŒã¿ãªã©ïŒãéä¿¡ããã®ã«åœ¹ç«ã€ããšãå€æããŸããã
ããããç
Goã¯ééããªãPythonãããå°ãªãïŒãããããã¯ãGoã¯26æ³ã§ã¯ãªãïŒããããã§ãããã€ãããã 移æ€äžã«æ°ã¥ããããšãããã€ããããŸãã
é¢æ°ãŸãã¯åŒã®çµæã®ã¢ãã¬ã¹ãååŸããããšã¯ã§ããŸãã ã å€æ°ã®ã¢ãã¬ã¹ããŸãã¯ç¹æ®ãªã±ãŒã¹ãšããŠ&Point{2, 3}
ãããªæ§é ãªãã©ã«ã&time.Now()
ã§ããŸããã &time.Now()
å®è¡ããããšã¯ã§ããŸããã ããã¯äžæçãªå€æ°ãäœæãããããå°ãé¢åã§ãã
now := time.Now() thing.TimePtr = &now
Goã³ã³ãã€ã©ã¯ç§ã®ããã«ãããç°¡åã«äœæãã thing.TimePtr = &time.Now()
æžãããŠãããããã«thing.TimePtr = &time.Now()
ãŸãã
HTTPãã³ãã©ãŒã¯ãå¿çãè¿ã代ããã«http.ResponseWriterãåãå
¥ããŸãã http.ResponseWriter API ã¯åºæ¬çãªã±ãŒã¹ã§ã¯å°ãå¥åŠã§ããã Header().Set
ã WriteHeader
ããã³Write
åŒã³åºãããæ£ããé åºãèŠããŠããå¿
èŠããããŸãã ãã³ãã©ãŒãåçŽã«å¿çä»ãã®ãªããžã§ã¯ããè¿ããæ¹ãç°¡åã§ãã
ãŸãããã³ãã©ãŒãåŒã³åºããåŸïŒãã®ã³ã°ãªã©ïŒã«HTTPå¿çã³ãŒããååŸããã®ãå°ãé¢åã«ãªããŸãã å¿çã³ãŒããä¿åããåœã®ResponseWriterã䜿çšããå¿ èŠããããŸãã
ãã®èšèšã«ã¯ããããååãªçç±ããããŸããïŒå¹çïŒäºææ§ïŒïŒããããã«ã¯ããããŸããã ãã³ãã©ãŒããªããžã§ã¯ããè¿ãã©ãããŒãç°¡åã«äœæã§ããŸããããããããªãããšã«ããŸããã
html / templateããã±ãŒãžã¯ç§ã«ã¯ããªãè¯ãããã«èŠããŸãããããé¢é£ãããã³ãã¬ãŒãããäœã§ãããäœã®ããã«ããã®ããç解ããã®ã«å°ãæéãããããŸããã ç¹ã«ãã³ãã¬ãŒãã®ç¶æ¿ã«ã€ããŠã¯ãããå°ãäŸãåèã«ããŠãã ããã ãã³ãã¬ãŒããšã³ãžã³ãååã«æ¡åŒµãããŠããããšãæ°ã«å ¥ã£ãŠããŸãïŒããšãã°ãç¬èªã®é¢æ°ãç°¡åã«è¿œå ã§ããŸãïŒã
ãã³ãã¬ãŒãã®ããŠã³ããŒãã¯å°ãå¥åŠãªã®ã§ã html/template
ãã¬ã³ããªã³ã°ããã±ãŒãžã«ã©ãããããã£ã¬ã¯ããªå
šäœãšããŒã¹ãã³ãã¬ãŒããäžåºŠã«ããŠã³ããŒãããŸããã
ãã³ãã¬ãŒãã®æ§æã倧äžå€«ã§ãããåŒã®æ§æã¯å°ãå¥åŠã§ãã Goèªäœã«äŒŒãæ§æã䜿çšããæ¹ãè¯ããšæããŸãã å®éã次åã¯æ¬è³ªçã«Goæ§æã䜿çšããåŒã®å¥ã®æ§æã匷å¶çã«åŠç¿ãããªãããã ãšãŽãquicktemplateã®ãããªãã®ã䜿çšããå¯èœæ§ãé«ããªããŸãã
ããŒã¿ããŒã¹/ SQLããã±ãŒãžã軜ãããŸãã ç§ã¯ORMã®æ倧ã®ãã¡ã³ã§ã¯ãããŸãããã database/sql
ããªãã¬ã¯ã·ã§ã³ã䜿çšããŠã encoding/json
䌌ãæ§é ãã£ãŒã«ãã«ããŒã¿ãå
¥åã§ãããšäŸ¿å©ã§ãã Scan()
ããScan()
ãŸããå®å
šã«äœã¬ãã«ã§ãã ãã ãããŸãã«ãããè¡ãããã«èŠããsqlxããã±ãŒãžããããŸãã
ãã¹ãã¯åçŽãããŸã Go go test
ãã¡ã³ã§ãããGoå
šäœã®ãã¹ãã¯åçŽã§ãããæšæºã»ããã«å°ãªããšãAssertEqual
ã¹ã¿ã€ã«ã®é¢æ°ãããã°ãããšAssertEqual
ãŸãã æåŸã«ã AssertMatches
é¢æ°ãšAssertMatches
é¢æ°ãäœæããŸããã ç¹°ãè¿ãã«ãªããŸããããããè¡ããµãŒãããŒãã£ã®ããã±ãŒãžãååšããããã§ãïŒ stretchr / testify ã
flag
ããã±ãŒãžã¯æŽŸæã§ãã ã©ãããããã¶ã€ã³ã¯ Googleã®ã³ãã³ãã©ã€ã³ãã©ã°ã®ããã±ãŒãžã«åºã¥ããŠãã-
ã§ããã -
圢åŒã¯ã -s
ããã³--long
ã䜿çšããGNU圢åŒãã»ãŒæšæºã§ãããããäŸç¶ãšããŠå¥åŠã«èŠããŸãã ç¹°ãè¿ãã«ãªããŸããããã®ããã±ãŒãžã«ã¯ãã³ãŒããå€æŽããå¿
èŠã®ãªãããããã€ã³çœ®æãå«ãå€æ°ã®çœ®æããããŸãã
ãã«ãã€ã³URLã«ãŒã¿ãŒïŒ ServeMux ïŒã¯ ãåºå®ãã¬ãã£ãã¯ã¹ã®ã¿ããã§ãã¯ã§ããããåçŽãããŸããã regexp
ããŒã¹ã®ã«ãŒã¿ãŒã®äœæã¯ç°¡åãªäœæ¥ã§ããïŒæ°åè¡ã®ã³ãŒãïŒã
ãã€ãã¹ãããã®äž»åŒµ
Pythonã®åŸãã³ãŒãã¯å®éã«ã¯ããã€ãã®å Žæã§ããå°ãåé·ã«èŠããŸãã æ¢ã«æžããããã«ãã»ãšãã©ã®ã³ãŒãã¯æååãPythonã®æååã«å€æããŸãããããã¯éåžžã«èªç¶ãªããšã§ãã
ãããããªã¹ããèŸæžãå«ããã®ãæ¬åœã«å¿ããŠããŸããã ãããæå¹ã«ã§ãããçŽ æŽããããšæããŸãã
gifts := []map[string]interface{}{} for _, g := range registryGifts { gifts = append(gifts, g.Map()) }
ããã«ïŒ
gifts := [g.Map() for _, g := range registryGifts]
å®éããã®ãããªå Žæã¯ç§ãäºæ³ãããããã¯ããã«å°ãªãã£ãã
åæ§ã«ã sort.Interface㯠åé·ãããŸãã sort.SliceïŒïŒãè¿œå ããã®ãæ£ããã¹ãããã§ããã ããããã¹ã©ã€ã¹ã€ã³ããã¯ã¹ã«ãŸã£ãã觊ããããšãªããPythonã®ããŒã§äžŠã¹æ¿ããã®ãã©ãã»ã©ç°¡åãã¯ä»ã§ãæ°ã«å ¥ã£ãŠããŸãã ããšãã°ãæååã®ãªã¹ãã倧æåãšå°æåãåºå¥ããã«ãœãŒãããã«ã¯ãPythonã§ã¯æ¬¡ã®ããã«ãªããŸãã
strs.sort(key=str.lower)
ããã³Goã®å ŽåïŒ
sort.Slice(strs, func(i, j int) bool { return strings.ToLower(strs[i]) < strings.ToLower(strs[j]) })
ãããŠãååãšããŠãç§ãæ¬ ããŠããã®ã¯ããã ãã§ããã ç§ã¯äŸå€ãèŠéããšæã£ãŠããŸããããããã¯éããŸãã ãããŠãäžè¬çãªä¿¡å¿µã«åããŠããžã§ããªãã¯å»è¬åã®æ¬ åŠã¯ç§ããã€ãäžåºŠã ãæ©ãŸããŸããã
ãªãè¡ãã®ïŒ
è¿ãå°æ¥ãPythonã®äœ¿çšããããã€ããã¯ãããŸããã ã¹ã¯ãªãããå°ããªãããžã§ã¯ããWebããã¯ãšã³ãã«åŒãç¶ã䜿çšããŸãã ããããGoãçå£ã«èŠãŠãããå€ãã®ãããžã§ã¯ãïŒéçåä»ãããªãã¡ã¯ã¿ãªã³ã°ãã¯ããã«å®¹æã«ããŸãïŒãšãèšèªããã©ãŒãã³ã¹ãéèŠãªãŠãŒãã£ãªãã£ãŸãã¯ã·ã¹ãã ïŒæ£çŽã«èšããšãCã§æžãããPythonã®ãã¹ãŠã®äœã¬ãã«ã©ã€ãã©ãªã§ã¯ããã§ã¯ãããŸããïŒéèŠïŒã
èŠçŽãããšãç§ãGoã奜ãã«ãªã£ãçç±ã®ããã€ããšãããªããããã奜ãã«ãªãçç±ïŒ
- åªããåŠç¿æ²ç·ïŒå®å šã«èªã¿åãå¯èœãªä»æ§ãšåçŽãªåã·ã¹ãã ãåããå°ããªèšèª
- é«éãªã³ã³ãã€ã«æé
- ããã€ãã®ãŠããŒã¯ã§åªããæ©èœïŒã¹ã©ã€ã¹ããŽã«ãŒãã³ãããŒã¯ãŒã
go
ãdefer
:=
ç°¡æœãªåæšè«ã®ãããã€ã³ã¿ãŒãã§ãŒã¹äžã®åã·ã¹ãã ã - èšèªãšæšæºã©ã€ãã©ãªã«é¢ããåªããç°¡æœãªããã¥ã¡ã³ã
- åªããçµã¿èŸŒã¿ããŒã«ïŒ
-
go build
ïŒããã°ã©ã ããã«ãããŸãïŒmakefileã¯äžèŠã§ãïŒ -
go fmt
ïŒã³ãŒããèªåçã«ãã©ãŒãããããŸãããã以äžã¹ã¿ã€ã«æŠäºã¯ãããŸãã -
go test
ïŒãã¹ãŠã®*_test.go
ãã¡ã€ã«ã§ãã¹ããå®è¡ããŸã -
go run
ïŒããã°ã©ã ãå³åº§ã«ã³ã³ãã€ã«ããŠå®è¡ããŸããã¹ã¯ãªããã®ããã«æããŸã -
dep
ïŒããã±ãŒãžãããŒãžã£ãŒãgo dep
ããã« - è¯å¥œã§æé·ããŠãããšã³ã·ã¹ãã ïŒããŒã¿ããŒã¹ã©ã€ãã©ãªãWebãã¬ãŒã ã¯ãŒã¯ãAWSãStripeãGraphQLãªã©ïŒ
- å®å®æ§ïŒGo 1ã¯5幎以äžäœ¿çšãããŠãããäºææ§ã匷ãçŽæãããŠããŸã ã Goã®èè ã¯ãèšèªã«è¿œå ãããã®ã«é¢ããŠéåžžã«ä¿å®çã§ãããããã«ã¯ååãªçç±ããããŸãã
- 誰ããèšèªã®å²åŠã奜ããšã¯éããŸããããããã¯ç§ã®ã¡ã³ã¿ã«ã¢ãã«ã«éåžžã«ããé©åããŸããåçŽããæå¿«ããã¹ããŒãã§ãã
-
ããã§ã¯ãGoã§äœãæžããŠã¿ãŠãã ããïŒGoã§æžããŸãïŒ ã