Irin ajo mi lati Python si Lọ - pinpin awọn imọran ati awọn orisun

Irin ajo mi lati Python si Lọ - pinpin awọn imọran ati awọn orisun

Lati ọdọ onitumọ: túmọ Fun ọ, nkan Ilad Leev nipa iyipada lati Python si Lọ. Nkan naa yoo wulo kii ṣe fun awọn olupilẹṣẹ alakobere, ṣugbọn fun gbogbo eniyan ti o nifẹ bakan ni Go.

Mo feran Python. Ede yii jẹ ayanfẹ mi fun ọdun marun sẹhin. O jẹ ọrẹ, daradara, ati rọrun lati kọ ẹkọ. Ti a lo fun fere ohun gbogbo: lati iwe afọwọkọ ti o rọrun ati idagbasoke wẹẹbu si iworan data ati ẹkọ ẹrọ

Awọn mimu "maturation" ti Go, agbegbe ti o pọju ati otitọ pe awọn ile-iṣẹ diẹ sii ati siwaju sii n gba ede yii lẹhin awọn idanwo aṣeyọri fi agbara mu mi lati fiyesi si rẹ ati ki o ṣawari sinu awọn iwe-iwe. Ṣugbọn ifiweranṣẹ yii kii ṣe nipa eyiti o dara julọ - Python tabi Go: Nọmba nla ti awọn afiwera wa lori Intanẹẹti. Ni ero mi, gbogbo rẹ da lori ohun elo naa. Emi yoo sọrọ nipa idi ti MO fi yan Go, fifun diẹ ninu awọn imọran ati awọn ọna asopọ si awọn orisun to wulo fun ẹnikẹni ti o nifẹ si koko-ọrọ naa.

Skillbox ṣe iṣeduro: Ilana ti o wulo Python Olùgbéejáde lati ibere.

A leti: fun gbogbo awọn oluka ti "Habr" - ẹdinwo ti 10 rubles nigbati o forukọsilẹ ni eyikeyi iṣẹ-ẹkọ Skillbox nipa lilo koodu ipolowo “Habr”.

Irin ajo mi lati Python si Lọ - pinpin awọn imọran ati awọn orisun

Awọn akiyesi

Ohun akọkọ ti Mo ṣe ni ibẹrẹ irin-ajo mi ni ikẹkọ ikẹkọ osise ti o dara julọ “Irin-ajo Lọ" O funni ni oye ti sintasi ti ede naa.

Kí ìmọ̀ mi lè túbọ̀ sunwọ̀n sí i, mo tún ka ìwé náà “Lọ fun Python Programmers”, eyiti o gba wa laaye lati tẹsiwaju si ipele atẹle - idanwo ati aṣiṣe.

Mo mu awọn iṣẹ ti o mọ ti Mo lo ni Python (serialization JSON tabi mimu awọn ipe HTTP mu) ati gbiyanju kikọ wọn ni Go. Ṣeun si afiwera ti o han gbangba yii, Mo ni anfani lati ṣe idanimọ awọn iyatọ bọtini laarin awọn ede.

Ifilelẹ ise agbese

Ni akọkọ, Python ko nilo ilana ilana ilana kan pato, lakoko ti Go ṣe.

Go nlo ifilelẹ “boṣewa”, eyiti o jẹ eka diẹ sii ti o nilo iṣẹ diẹ sii. Ni apa keji, abajade jẹ ipilẹ koodu ti o ni eto ti o dara ti o lo eto modular kan, ati pe koodu naa wa ni iṣeto ti o muna bi iṣẹ akanṣe n gbooro.

Ikẹkọ osise "Bii o ṣe le Kọ koodu Go” ṣe alaye bi o ṣe le ṣeto iṣẹ rẹ.

Aimi to lagbara titẹ

Go ti tẹ ni iṣiro, eyiti yoo jẹ ki awọn ti a lo si awọn ede ti a tẹ ni agbara bii Python ati Ruby ni itunu.

Ko si iyemeji pe awọn ede ti o ni agbara jẹ aṣiṣe-aṣiṣe diẹ sii ati pe o nilo igbiyanju diẹ sii ni apakan ti olupilẹṣẹ lati fọwọsi data titẹ sii. Apeere jẹ iṣẹ kan ti o ṣe iṣiro apapọ odidi meji. Ti o ba kọja okun kan si iṣẹ kan (eyiti kii ṣe toje yẹn), yoo ja si ni IruError kan.

Eyi ko le ṣẹlẹ ni Go nitori o ni lati sọ iru kan fun gbogbo oniyipada ati iṣẹ ati iru oniyipada iṣẹ naa yoo pada.

Ni akọkọ o jẹ didanubi-Mo ro pe ẹya yii ti Go fa fifalẹ awọn nkan-ṣugbọn lẹhinna Mo rii pe sisọ ohun gbogbo n gba akoko pamọ gangan ati dinku iṣeeṣe awọn aṣiṣe.

Ibaṣepọ abinibi

Go ni atilẹyin concurrency abinibi nipa lilo awọn subroutines ati awọn paipu, eyiti o rọrun.

Awọn Erongba ti awọn ikanni dabi a bit airoju ni akọkọ. Sibẹsibẹ, ni akoko pupọ, o di mimọ, ati pe o bẹrẹ lati gbadun awọn aye tuntun ati ṣiṣẹ ni itara pẹlu wọn.

Eyi ni iworan ti ohun gbogbo ti a sọ lati Ivan Daniliuk.

package main
 
func main() {
    // create new channel of type int
    ch := make(chan int)
 
// start new anonymous goroutine
    go func() {
        // send 42 to channel
        ch <- 42
    }()
    // read from channel
    <-ch
}

Irin ajo mi lati Python si Lọ - pinpin awọn imọran ati awọn orisun

Awọn apẹẹrẹ diẹ sii nibi и nibi.

Nṣiṣẹ pẹlu JSON

O dara, json.loads () ko si mọ. Ni Python ohun gbogbo rọrun: a lo json.loads, ati pe ko si awọn iṣoro.

Ṣugbọn ni Go, ede ti a tẹ ni iṣiro, iṣẹ ṣiṣe yii di eka sii.

Nibi, nigba lilo JSON, ohun gbogbo ti wa ni asọye tẹlẹ. Eyikeyi aaye ti ko ba wo inu eto ti a fun ni yoo kọju, eyiti o dara. O le ronu rẹ bi ilana ti a ti gba tẹlẹ laarin awọn ẹgbẹ meji. Awọn data ti o gba ni JSON yẹ ki o jẹ ohun ti o nireti, ati awọn aaye JSON ati awọn iru yẹ ki o jẹ "gba lori" nipasẹ ẹgbẹ mejeeji.

{
  “first”: “Elad”,
  “last”: “Leev”,
  “location”:”IL”,
  “id”: “93”
}

type AccountData struct {
 First    string `json:"first"`
 Last     string `json:"last"`
 Location string `json:"location"`
 ID       string `json:"id"`
}

Nitoribẹẹ, o le deserialize JSON laisi awọn ẹya, ṣugbọn eyi yẹ ki o yago fun ti o ba ṣeeṣe ati pe o yẹ ki o ṣe akiyesi iseda aimi ti ede naa.

Yiyipada JSON lori GO dara julọ salaye ni yi post tabi nibi.

Ọlẹ pupọ lati yi JSON rẹ pada si eto Go kan? Kosi wahala, ọpa yii yoo ṣe ohun gbogbo fun ọ.

Mọ koodu

Akopọ Go yoo ma gbiyanju nigbagbogbo lati jẹ ki koodu rẹ di mimọ. O ka awọn oniyipada ti ko lo lati jẹ aṣiṣe akojọpọ. Go nlo ọna alailẹgbẹ ti o fun laaye eto lati yanju awọn iṣoro ọna kika pupọ julọ. Nitorinaa, Go yoo ṣiṣẹ eto gofmt nigba fifipamọ tabi ṣajọ ati ṣatunṣe ọna kika funrararẹ.

Ṣe o ko bikita nipa awọn oniyipada? O DARA! Lo _ (underscore) ki o si fi si id sofo.

Ikẹkọ Mastrid fun apakan yii ti ṣiṣẹ pẹlu ede jẹ alaye lati “Lọ ti o munadoko".

Wiwa awọn ọtun ìkàwé ati nílẹ

Mo ti lo awọn ilana ati awọn ile-ikawe bii Flask, Jinja2, Awọn ibeere, ati paapaa Kazoo pẹlu Python, nitorinaa Mo bẹru pe Emi kii yoo rii ohunkohun ti o baamu fun Go.

Ṣugbọn agbegbe ti yanju awọn iṣoro wọnyi tẹlẹ: ede naa ni awọn ile-ikawe alailẹgbẹ tirẹ ti o jẹ ki o gbagbe patapata nipa ohun ti o lo tẹlẹ.

Eyi ni awọn ayanfẹ mi.

Awọn ibeere Python => net/http

net/http n pese alabara HTTP ti o rọrun ati rọrun lati lo ati imuse olupin.

Flask + Jinja2 => Gin

Jini - Ilana oju opo wẹẹbu HTTP pẹlu API ti o rọrun pupọ: awọn aye ipa ọna, awọn faili igbasilẹ, ipa-ọna ẹgbẹ (/api/v1, /api/v2), awọn ọna kika log aṣa ti n ṣiṣẹ awọn faili aimi, Rendering HTML ati agbedemeji aṣa ti o lagbara gaan.
Oṣuwọn eyi ala.

Iṣẹda CLI => Ejò

paramọlẹ - ile-ikawe kan fun ṣiṣẹda awọn ohun elo CLI ti o lagbara, ati eto kan fun ṣiṣẹda awọn ohun elo ati awọn faili ipele.
Cobra ni a lo ni ọpọlọpọ awọn iṣẹ akanṣe Go nla, pẹlu Kubernetes, etcd ati OpenShift.

Eyi ni awọn ile-ikawe diẹ diẹ sii ti Mo ṣeduro gaan: Omiran, Gonfig ati atokọ iyalẹnu yii - Oniyi-Lọ.

Miiran Wulo Resources

[1] Francesc Campoy  - dajudaju o nilo lati ṣe iṣiro awọn wọnyi Youtube ikanni и GitHub profaili.

[2] GopherCon - fidio. [3] Lọ Awọn apẹẹrẹ Wẹẹbu. [4] Golang osẹ, Gopher Academy, Awọn iroyin Golang - Twitter iroyin.

Summing soke

Lehin ti o jẹ olumulo Python deede fun ọdun marun, Mo bẹru pe iyipada si Go yoo jẹ irora.

Ṣugbọn rara: iṣẹ wa lati agbegbe Go ti o gbooro ati ṣe afikun awọn agbara ti ede, ati ọpọlọpọ awọn orisun iwulo ti yoo ṣe iranlọwọ fun ọ pẹlu iyipada naa.

Go n dagba ni kiakia, ati pe Mo nireti pe Google le jẹ ki o jẹ ede akọkọ fun kikọ awọn ohun elo awọsanma ati awọn amayederun.

Darapo Mo Wa!

Irin ajo mi lati Python si Lọ - pinpin awọn imọran ati awọn orisun

Skillbox ṣe iṣeduro:

orisun: www.habr.com