Fy nhaith o Python i Go - rhannu awgrymiadau ac adnoddau

Fy nhaith o Python i Go - rhannu awgrymiadau ac adnoddau

Gan y cyfieithydd: wedi'i gyfieithu I chi, erthygl Ilad Leev am y trawsnewid o Python i Go. Bydd yr erthygl yn ddefnyddiol nid yn unig i raglenwyr newydd, ond hefyd i bawb sydd â diddordeb mewn Go.

Dw i'n hoffi Python. Yr iaith hon yw fy ffefryn ers pum mlynedd. Mae'n gyfeillgar, yn effeithlon, ac yn hawdd i'w ddysgu. Defnyddir ar gyfer bron popeth: o sgriptio syml a datblygu gwe i ddelweddu data a dysgu peirianyddol

Roedd “aeddfedu” graddol Go, y gymuned eang a’r ffaith bod mwy a mwy o gwmnïau’n mabwysiadu’r iaith hon ar ôl profion llwyddiannus yn fy ngorfodi i dalu sylw iddi a threiddio i’r llenyddiaeth. Ond nid yw'r post hwn yn ymwneud â pha un sy'n well - Python neu Go: Mae nifer enfawr o gymariaethau ar y Rhyngrwyd. Yn fy marn i, mae'r cyfan yn dibynnu ar y cais. Rydw i'n mynd i siarad am pam dewisais Go, gan roi rhai awgrymiadau a dolenni i adnoddau defnyddiol i unrhyw un sydd â diddordeb yn y pwnc.

Mae Skillsbox yn argymell: Cwrs ymarferol Datblygwr Python o'r dechrau.

Rydym yn atgoffa: i holl ddarllenwyr "Habr" - gostyngiad o 10 rubles wrth gofrestru ar unrhyw gwrs Skillbox gan ddefnyddio'r cod hyrwyddo "Habr".

Fy nhaith o Python i Go - rhannu awgrymiadau ac adnoddau

Sylwadau

Y peth cyntaf wnes i ar ddechrau fy siwrnai oedd astudio’r tiwtorial swyddogol rhagorol “Taith o Go" Mae'n rhoi dealltwriaeth o gystrawen yr iaith.

Er mwyn gwella fy ngwybodaeth, darllenais y llyfr hefyd “Ewch am Raglenwyr Python”, a oedd yn caniatáu inni symud ymlaen i'r cam nesaf - treial a chamgymeriad.

Cymerais y swyddogaethau cyfarwydd a ddefnyddiais yn Python (cyfresoli JSON neu drin galwadau HTTP) a cheisio eu hysgrifennu yn Go. Diolch i'r gymhariaeth glir hon, roeddwn yn gallu nodi gwahaniaethau allweddol rhwng ieithoedd.

Cynllun y prosiect

Yn gyntaf oll, nid oes angen hierarchaeth cyfeiriadur penodol ar Python, ond mae Go yn ei wneud.

Mae Go yn defnyddio'r cynllun "safonol", sydd ychydig yn fwy cymhleth ac mae angen mwy o waith arno. Ar y llaw arall, y canlyniad yw sylfaen cod wedi'i strwythuro'n dda sy'n defnyddio strwythur modiwlaidd, ac mae'r cod yn parhau i fod wedi'i drefnu'n llym wrth i'r prosiect ehangu.

Tiwtorial swyddogol “Sut i Ysgrifennu Go Cod” yn esbonio sut i drefnu eich gwaith.

Teipio cryf statig

Mae Go wedi'i deipio'n statig, a fydd yn gwneud i'r rhai sydd wedi arfer ag ieithoedd sydd wedi'u teipio'n ddeinamig fel Python a Ruby deimlo'n anghyfforddus.

Nid oes amheuaeth bod ieithoedd deinamig yn fwy tueddol o wallau ac mae angen mwy o ymdrech ar ran y datblygwr i ddilysu data mewnbwn. Enghraifft yw ffwythiant sy'n cyfrifo swm dau gyfanrif. Os byddwch chi'n trosglwyddo llinyn i swyddogaeth (nad yw mor brin â hynny), bydd yn arwain at Gwall Math.

Ni all hyn ddigwydd yn Go oherwydd mae'n rhaid i chi ddatgan math ar gyfer pob newidyn a swyddogaeth a pha fath o newidyn y bydd y ffwythiant yn ei ddychwelyd.

Ar y dechrau roedd yn blino - roeddwn i'n meddwl bod y nodwedd hon o Go wedi arafu pethau - ond yna sylweddolais fod datgan popeth mewn gwirionedd yn arbed amser ac yn lleihau'r tebygolrwydd o gamgymeriadau.

Concurrency brodorol

Mae gan Go gefnogaeth concurrency brodorol gan ddefnyddio is-reolweithiau a phibellau, sy'n gyfleus.

Mae'r cysyniad o sianeli yn ymddangos ychydig yn ddryslyd ar y dechrau. Fodd bynnag, dros amser, mae'n dod yn gliriach, a byddwch yn dechrau mwynhau cyfleoedd newydd a gweithio'n weithredol gyda nhw.

Dyma ddelweddiad o bopeth a ddywedwyd o Ivan Danilyuk.

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
}

Fy nhaith o Python i Go - rhannu awgrymiadau ac adnoddau

Mwy o enghreifftiau yma и yma.

Gweithio gyda JSON

Wel, nid yw json.loads() yn fwy. Yn Python mae popeth yn syml: rydym yn defnyddio json.loads, ac nid oes unrhyw broblemau.

Ond yn Go, iaith sydd wedi'i theipio'n statig, mae'r llawdriniaeth hon yn dod yn fwy cymhleth.

Yma, wrth ddefnyddio JSON, mae popeth wedi'i ddiffinio ymlaen llaw. Bydd unrhyw faes nad yw'n ffitio i'r strwythur penodol yn cael ei anwybyddu, sy'n dda. Gallwch feddwl amdano fel protocol y cytunwyd arno ymlaen llaw rhwng dwy blaid. Dylai'r data a gewch yn JSON fod yr hyn yr ydych yn ei ddisgwyl, a dylai'r ddau barti "gytuno" ar feysydd a mathau JSON.

{
  “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"`
}

Wrth gwrs, gallwch ddad-gyfrifo JSON heb strwythurau, ond dylid osgoi hyn os yn bosibl a dylid ystyried natur statig yr iaith.

Dadgodio JSON ar GO sydd orau a eglurir yn y post hwn neu yma.

Rhy ddiog i drosi eich JSON yn strwythur Go? Dim problem, bydd yr offeryn hwn yn gwneud popeth i chi.

Cod glân

Bydd y casglwr Go bob amser yn ceisio cadw'ch cod yn lân. Mae'n ystyried newidynnau nas defnyddiwyd fel gwall crynhoi. Mae Go yn defnyddio dull unigryw sy'n caniatáu i'r system ddatrys y rhan fwyaf o broblemau fformatio. Felly, bydd Go yn rhedeg y rhaglen gofmt wrth arbed neu lunio a chywiro'r fformatio ei hun.

Onid ydych yn poeni am newidynnau? IAWN! Defnyddiwch _ (tanlinellu) a'i aseinio i id gwag.

Mae tiwtorial Mastrid ar gyfer y rhan hon o weithio gyda’r iaith yn wybodaeth o “Effeithiol Go".

Dod o hyd i'r llyfrgell a'r fframweithiau cywir

Rwyf wedi defnyddio fframweithiau a llyfrgelloedd fel Flask, Jinja2, Requests, a hyd yn oed Kazoo gyda Python, felly roeddwn yn ofni na fyddwn yn dod o hyd i unrhyw beth addas ar gyfer Go.

Ond mae’r gymuned eisoes wedi datrys y problemau hyn: mae gan yr iaith ei llyfrgelloedd unigryw ei hun sy’n caniatáu ichi anghofio’n llwyr am yr hyn a ddefnyddiwyd gennych o’r blaen.

Dyma fy ffefrynnau.

Ceisiadau Python => net/http

rhwyd/http yn darparu cleient HTTP cyfleus a hawdd ei ddefnyddio a gweithrediad gweinydd.

Fflasg + Jinja2 => Jin

Gin - Fframwaith gwe HTTP gydag API syml iawn: paramedrau llwybr, ffeiliau y gellir eu llwytho i lawr, llwybro grŵp (/api/v1, /api/v2), fformatau log wedi'u teilwra sy'n gwasanaethu ffeiliau statig, rendrad HTML a nwyddau canol arfer pwerus iawn.
Cyfradd hyn meincnod.

Creu CLI => Cobra

Cobra — llyfrgell ar gyfer creu cymwysiadau CLI pwerus, yn ogystal â rhaglen ar gyfer cynhyrchu cymwysiadau a ffeiliau swp.
Defnyddir Cobra mewn llawer o brosiectau Go mawr, gan gynnwys Kubernetes, ac ati ac OpenShift.

Dyma ychydig mwy o lyfrgelloedd yr wyf yn eu hargymell yn fawr: Viper, Gonffig a'r rhestr anhygoel hon - Awesome-Ewch.

Adnoddau Defnyddiol Eraill

[1] Francesc Campoy  - yn bendant mae angen i chi werthuso'r rhain Sianel YouTube и Proffil GitHub.

[2] GopherCon - fideo. [3] Ewch Enghreifftiau Gwe. [4] Golang Wythnosol, Academi Gopher, Newyddion Golang — Cyfrifon Twitter.

Crynhoi

Ar ôl bod yn ddefnyddiwr Python rheolaidd ers pum mlynedd, roeddwn i'n ofni y byddai newid i Go yn boenus.

Ond na: mae yna waith gan gymuned Go sy’n ehangu ac yn ategu galluoedd yr iaith, yn ogystal ag adnoddau defnyddiol amrywiol a fydd yn eich helpu gyda’r trawsnewid.

Mae Go yn tyfu'n gyflym, a gobeithio y gall Google ei gwneud yn brif iaith ar gyfer ysgrifennu cymwysiadau cwmwl a seilwaith.

Ymunwch â ni!

Fy nhaith o Python i Go - rhannu awgrymiadau ac adnoddau

Mae Skillsbox yn argymell:

Ffynhonnell: hab.com