Hobaneng ha Go le Mpe ho Baetsi ba Lenaneo ba Unsmart

Sengoliloeng sena se ngotsoe e le karabo ho se phatlalalitsoeng pele sengoloa sa antipodean.

Hobaneng ha Go le Mpe ho Baetsi ba Lenaneo ba Unsmart

Lilemong tse peli le ho feta tse peli tse fetileng esale ke sebelisa Go ho kenya ts'ebetsong seva se ikhethileng sa RADIUS se nang le sistimi e tsoetseng pele ea litefiso. Ha ke ntse ke le tseleng, ke ntse ke ithuta ho rarahana ha puo ka boeona. Mananeo ka boeona a bonolo haholo 'me hase morero oa sehlooho sena, empa phihlelo ea ho sebelisa Go ka boeona e tšoaneloa ke mantsoe a seng makae ho itšireletsa. Puo ea Go e ntse e fetoha puo e sebelisoang haholo bakeng sa khoutu e tebileng, e ka senyehang. Puo e entsoe ke Google, moo e sebelisoang ka mafolofolo. Taba ea mantlha, ke nahana ka 'nete hore moralo oa puo ea Go o fosahetse ho baetsi ba mananeo ba UNintelligent.

E etselitsoe baetsi ba mananeo ba fokolang?

Ba fokolang ba bua ka mathata. Puo e matla ka mehopolo le litoro...

Go bonolo haholo ho ithuta, ho bonolo hoo o ka bala khoutu ntle le koetliso ho hang. Karolo ena ea puo e sebelisoa lik'hamphaning tse ngata tsa lefats'e ha khoutu e baloa hammoho le litsebi tseo e seng tsa mantlha (batsamaisi, bareki, joalo-joalo). Sena se loketse haholo bakeng sa mekhoa e kang Design Driven Development.
Esita le baetsi ba mananeo a qalang ba qala ho hlahisa khoutu e ntle ka mor'a beke kapa tse peli. Buka eo ke ithutileng eona ke "Go Programming" (ea Mark Summerfield). Buka ena e ntle haholo, e ama mefuta e mengata ea puo. Kamora lipuo tse rarahaneng ho sa hlokahale joalo ka Java, PHP, ho hloka boselamose hoa khatholla. Empa kapele kapa hamorao, baetsi ba mananeo ba bangata ba fokolang ba na le mohopolo oa ho sebelisa mekhoa ea khale tšimong e ncha. Na see se hlile sea hlokahala?

Rob Pike (setsebi se ka sehloohong sa puo) o thehile puo ea Go e le puo ea indasteri eo ho leng bonolo ho e utloisisa le ho e sebelisa ka katleho. Puo e etselitsoe tlhahiso e ngata ho lihlopha tse kholo 'me ha ho pelaelo ka eona. Baetsi ba mananeo ba bangata ba qalang ba tletleba ka hore ho na le likarolo tse ngata tseo ba li sieo. Takatso ena ea ho nolofatsa e ne e le qeto e hlokolosi ea baqapi ba puo, 'me e le hore re utloisise ka botlalo hore na ke hobane'ng ha e ne e hlokahala, re tlameha ho utloisisa tšusumetso ea bahlahisi le seo ba neng ba leka ho se finyella ho Go.

Joale ke hobane’ng ha e entsoe hore e be bonolo hakaale? Mona ke mantsoe a qotsitsoeng ho Rob Pike:

Taba ea bohlokoa mona ke hore baetsi ba rona ba mananeo ha se bafuputsi. Ka tloaelo, ba banyenyane haholo, ba tla ho rona ka mor'a ho ithuta, mohlomong ba ithutile Java, kapa C / C ++, kapa Python. Ha ba utloisise puo e ntle, empa ka nako e ts'oanang re batla hore ba thehe software e ntle. Ke kahoo puo e lokelang ho ba bonolo ho e utloisisa le ho ithuta.

O lokela ho tseba, a batla a bua joalo ka C. Baetsi ba mananeo ba sebetsang ho Google ba qala mesebetsi ea bona esale pele 'me hangata ba tloaelane le lipuo tsa tsamaiso, haholo-holo lelapa la C. Tlhokahalo ea tlhahiso e potlakileng ea puo e ncha ea lenaneo e bolela hore puo ha ea lokela ho ba e feteletseng haholo.

Mantsoe a bohlale, na ha ho joalo?

Lintho tse entsoeng ka mokhoa o bonolo

Bonolo ke boemo bo hlokahalang bakeng sa botle. Lev Tolstoy.

Ho e boloka e le bonolo ke e 'ngoe ea lipakane tsa bohlokoa ka ho fetisisa moralong ofe kapa ofe. Joalokaha u tseba, morero o phethahetseng hase morero oo ho seng letho leo u ka le eketsang, empa oo ho oona ho seng letho le ka tlosoang. Batho ba bangata ba lumela hore ho rarolla (kapa esita le ho hlalosa) mathata a rarahaneng, ho hlokahala sesebelisoa se rarahaneng. Leha ho le joalo, ha ho joalo. Ha re nke puo ea PERL mohlala. Litsebi tsa likhopolo tsa puo li ne li lumela hore moetsi oa mananeo a lokela ho ba le bonyane litsela tse tharo tse fapaneng tsa ho rarolla bothata bo le bong. Litsebi tsa likhopolo tsa Se-Go li ile tsa nka tsela e fapaneng; li ile tsa etsa qeto ea hore tsela e le ’ngoe, empa e le hantle, e ne e lekane ho finyella pakane. Mokhoa ona o na le motheo o tebileng: tsela e le 'ngoe feela e bonolo ho ithuta le ho thata ho lebala.

Bafalli ba bangata ba tletleba ka hore puo eo ha e na lintho tse khahlehang. E, sena ke 'nete, empa ena ke e' ngoe ea melemo e ka sehloohong ea puo. Puo e na le bonyane ba boselamose - kahoo ha ho na tsebo e tebileng e hlokahalang ho bala lenaneo. Ha e le verbosity ea khoutu, sena ha se bothata ho hang. Lenaneo le ngotsoeng hantle la Golang le balla holimo, ka sebopeho se fokolang kapa se se nang letho. Ho phaella moo, lebelo la ho bala lenaneo ke bonyane taelo ea boholo ho feta lebelo la ho le ngola. Haeba u nka hore khoutu eohle e na le fomete e ts'oanang (e entsoe ka taelo ea gofmt e kentsoeng), joale ho bala mela e 'maloa e eketsehileng ha se bothata ho hang.

E sa hlahise maikutlo haholo

Art ha e mamelle ha tokoloho ea eona e thibetsoe. Ho nepahala ha se boikarabelo ba hae.

Ka lebaka la takatso ea ho ba bonolo, Go ha e na meaho eo ka lipuo tse ling e nkuoang e le ntho ea tlhaho ke batho ba e tloaetseng. Qalong ho ka 'na ha se ke ha e-ba bonolo, empa joale u hlokomela hore lenaneo le bonolo haholo ebile le bonolo ho le bala.

Mohlala, sesebelisoa sa console se balang stdin kapa faele ho tsoa ho likhang tsa mola oa taelo se ka shebahala tjena:

package main

import (
    "bufio"
    "flag"
    "fmt"
    "log"
    "os"
)

func main() {

    flag.Parse()

    scanner := newScanner(flag.Args())

    var text string
    for scanner.Scan() {
        text += scanner.Text()
    }

    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }

    fmt.Println(text)
}

func newScanner(flags []string) *bufio.Scanner {
    if len(flags) == 0 {
        return bufio.NewScanner(os.Stdin)
    }

    file, err := os.Open(flags[0])

    if err != nil {
        log.Fatal(err)
    }

    return bufio.NewScanner(file)
}

Tharollo ea bothata bo tšoanang ho D, leha e shebahala e le khuts'oane, ha ho bonolo ho e bala

import std.stdio, std.array, std.conv;

void main(string[] args)
{
    try
    {
        auto source = args.length > 1 ? File(args[1], "r") : stdin;
        auto text   = source.byLine.join.to!(string);

        writeln(text);
    }
    catch (Exception ex)
    {
        writeln(ex.msg);
    }
}

Lihele tsa ho kopitsa

Motho o jara lihele ka hare ho eena. Martin Luther.

Ba qalang ba lula ba tletleba ka Go mabapi le khaello ea li-generic. Ho rarolla bothata bona, boholo ba bona ba sebelisa ho kopitsa khoutu e tobileng. Mohlala, ts'ebetso ea ho akaretsa lenane la lipalo, litsebi tse joalo li lumela hore ts'ebetso e ke ke ea kengoa ts'ebetsong ka tsela efe kapa efe ntle le ka mokhoa o bonolo oa ho kopitsa bakeng sa mofuta o mong le o mong oa data.

package main

import "fmt"

func int64Sum(list []int64) (uint64) {
    var result int64 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int32Sum(list []int32) (uint64) {
    var result int32 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func main() {

    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(int32Sum(list32))
    fmt.Println(int64Sum(list64))
}

Puo e na le mekhoa e lekaneng ea ho phethahatsa mehaho e joalo. Ka mohlala, lenaneo la generic le ka ba hantle.

package main

import "fmt"

func Eval32(list []int32, fn func(a, b int32)int32) int32 {
    var res int32
    for _, val := range list {
        res = fn(res, val)
    }
    return res
}

func int32Add(a, b int32) int32 {
    return a + b
}

func int32Sub(a, b int32) int32 {
    return a + b
}

func Eval64(list []int64, fn func(a, b int64)int64) int64 {
    var res int64
    for _, val := range list {
        res = fn(res, val)
    }
    return res
}

func int64Add(a, b int64) int64 {
    return a + b
}

func int64Sub(a, b int64) int64 {
    return a - b
}

func main() {

    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(Eval32(list32, int32Add))
    fmt.Println(Eval64(list64, int64Add))
    fmt.Println(Eval64(list64, int64Sub))
}

'Me, leha khoutu ea rona e bile nako e telele ho feta nyeoe e fetileng, e se e tloaelehile. Ka hona, ho ke ke ha ba thata ho rona ho kenya ts'ebetsong mesebetsi eohle ea lipalo.

Ba bangata ba tla re lenaneo la D le shebahala le le khuts'oane haholo, 'me ba tla nepahala.

import std.stdio;
import std.algorithm;

void main(string[] args)
{
    [1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}

Leha ho le joalo, e khutšoanyane feela, empa ha e nepahale ho feta, kaha ts'ebetsong ea D e hlokomoloha ka ho feletseng bothata ba ho sebetsana le liphoso.

Bophelong, ha ho rarahana ha logic ho ntse ho eketseha, lekhalo le fokotseha ka potlako. Lekhalo le koaleha ka potlako le ho feta ha u hloka ho etsa ketso e ke keng ea etsoa ho sebelisoa liopereishene tse tloaelehileng tsa puo.

Mabapi le ho boloka, ho atolosa, le ho baloa, ka maikutlo a ka, puo ea Go ea hlōla, le hoja e lahleheloa ke lentsoe.

Mananeo a akaretsang maemong a mang a re fa melemo e ke keng ea latoloa. Sena se bontšoa ka ho hlaka ke sephutheloana sa mefuta. Kahoo, ho hlophisa lethathamo leha e le lefe, re hloka feela ho kenya ts'ebetsong sebopeho sa mofuta.Interface.

import "sort"

type Names []string

func (ns Names) Len() int {
    return len(ns)
}

func (ns Names) Less(i, j int) bool {
    return ns[i] < ns[j]
}

func (ns Names) Swap(i, j int) {
    ns[i], ns[j] = ns[j], ns[i]
}

func main() {
    names := Names{"London", "Berlin", "Rim"}
    sort.Sort(names)
}

Haeba u nka morero ofe kapa ofe oa mohloli o bulehileng 'me u tsamaise grep "interface{}" -R taelo, u tla bona hore na ho sebelisoa li-interfaces tse ferekanyang hangata hakae. Makhomreiti a haufi-ufi a tla re hang-hang sena sohle se bakoa ke khaello ea li-generic. Leha ho le joalo, ha ho joalo kamehla. Ha re nke mohlala oa Delphi. Leha ho na le li-generic tse tšoanang, e na le mofuta o ikhethileng oa VARIANT bakeng sa ts'ebetso e nang le mefuta ea data e ikemetseng. Puo ea Go e etsa joalo.

Ho tloha kanono ho isa lirobeleng

Mme straitjacket e tlameha ho lekana boholo ba bohlanya. Stanislav Lec.

Balateli ba bangata ba feteletseng ba ka bolela hore Go e na le mokhoa o mong oa ho etsa li-generic - reflection. 'Me ba tla nepahala ... empa feela maemong a sa tloaelehang.

Rob Pike oa re lemosa:

Sena ke sesebelisoa se matla se lokelang ho sebelisoa ka hloko. E lokela ho qojoa ntle le haeba ho hlokahala ka tieo.

Wikipedia e re bolella tse latelang:

Reflection e bolela ts'ebetso eo ka eona lenaneo le ka behang leihlo le ho fetola sebopeho sa lona le boitšoaro nakong ea ts'ebetso. Paradigm ea lenaneo e bonts'ang maikutlo e bitsoa reflective programming. Ena ke mofuta oa metaprogramming.

Leha ho le joalo, joalo ka ha u tseba, u tlameha ho lefella ntho e 'ngoe le e' ngoe. Tabeng ena ke:

  • bothata ba ho ngola mananeo
  • lebelo la ho phethahatsa lenaneo

Ka hona, ho thuisa ho tlameha ho sebelisoa ka hloko, joalo ka sebetsa se nang le matla a maholo. Tšebeliso e sa nahaneleng ea ho thuisa e lebisa mananeong a sa baleheng, liphoso tse sa khaotseng le lebelo le tlaase. Ntho feela ea hore moqapi oa lenaneo la snob a khone ho bontša khoutu ea hae ka pel'a basebetsi-'moho le eena ba bang, ba pragmatic le ba itekanetseng.

Thoto ea setso e tsoang Xi? Che, ho tsoa lipuong tse ngata!

Hammoho le leruo, likoloto li boetse li sieloa ho majalefa.

Ho sa tsotellehe taba ea hore ba bangata ba lumela hore puo e thehiloe ka ho feletseng ho C heritage, sena ha se joalo. Puo e kenyelletsa likarolo tse ngata tsa lipuo tse ntle ka ho fetisisa tsa lenaneo.

hokahanngoang

Pele ho tsohle, syntax ea libopeho tsa sebōpeho-puo e itšetlehile ka syntax ea puo ea C. Leha ho le joalo, puo ea DELPI le eona e bile le tšusumetso e khōlō. Kahoo, rea bona hore li-parentheses tse sa hlokahaleng, tse fokotsang haholo ho baloa ha lenaneo, li tlositsoe ka ho feletseng. Puo e boetse e na le ":="" opareitara e amanang le puo ea DELPHI. Mohopolo oa liphutheloana o alima lipuong tse kang ADA. Phatlalatso ea mekhatlo e sa sebelisoeng e alingoa puong ea PROLOG.

Litlhahiso

Liphutheloana li ne li ipapisitse le semantics ea puo ea DELPHI. Sephutheloana se seng le se seng se kenyelletsa lintlha le khoutu mme se na le mekhatlo ea poraefete le ea sechaba. Sena se o lumella ho fokotsa sebopeho sa sephutheloana ho bonyane.

Ts'ebetso ea ts'ebetso ka mokhoa oa moifo e alimiloe puong ea DELPHI.

Pokello

Ha ho na lebaka la hore ho be le motlae: Go e ile ea ntlafatsoa ha lenaneo la C le ntse le hlophisoa. E 'ngoe ea matla a puo ke pokello ea eona e potlakileng haholo. Mohopolo ona o nkiloe puong ea DELPHI. Sephutheloana se seng le se seng sa Go se tsamaisana le mojule oa DELPI. Liphutheloana tsena li etsoa hape ha ho hlokahala. Ka hona, ka mor'a phetoho e latelang, ha ho hlokahale hore u bokelle lenaneo lohle, empa ho e-na le hoo, bokella feela liphutheloana le liphutheloana tse fetotsoeng tse itšetlehileng ka liphutheloana tsena tse fetotsoeng ('me leha ho le joalo, hafeela li-interface tsa sephutheloana li fetohile).

Mehaho ea boemo bo holimo

Puo e na le meaho e mengata e fapaneng ea maemo a holimo e sa amaneng le lipuo tsa maemo a tlase joalo ka C.

  • Likhoele
  • Litafole tsa Hash
  • Likotoana
  • Ho thaepa ha letata ho alimiloe lipuong tse kang RUBY (eo, ka bomalimabe, ba bangata ba sa e utloisiseng kapa ba e sebelisang ka botlalo).

Tsamaiso ea memori

Tsamaiso ea memori ka kakaretso e lokeloa ke sengoloa se arohaneng. Haeba ka lipuo tse kang C ++, taolo e tlohetsoe ka ho feletseng ho moqapi, joale lipuong tsa morao-rao tse kang DELPHI, ho sebelisitsoe mohlala oa ho bala. Ka mokhoa ona, litšupiso tsa cyclic li ne li sa lumelloe, kaha lihlopha tsa likhutsana li ile tsa thehoa, joale Go e na le ho lemoha lihlopha tse joalo (joaloka C #). Ho phaella moo, moqosi oa lithōle o sebetsa hantle ho feta ts'ebetsong e mengata e tsejoang hona joale 'me e se e ka sebelisoa bakeng sa mesebetsi e mengata ea nako ea sebele. Puo ka boeona e lemoha maemo ha boleng ba ho boloka phetoho bo ka abeloa stack. Sena se fokotsa mojaro ho mookameli oa memori mme se eketsa lebelo la lenaneo.

Concurrency le Concurrency

Ho bapisa le tlholisano ea puo ho feta thoriso. Ha ho puo ea boemo bo tlase e ka qothisanang lehlokoa le Go. Ho bua ka toka, ke habohlokoa ho hlokomela hore mohlala ha oa qaptjoa ke bangoli ba puo, empa o ne o alima puo e ntle ea khale ea ADA. Puo e khona ho sebetsana le limilione tsa likhokahano tse tšoanang li sebelisa li-CPU tsohle, ha li ntse li e-na le tatellano ea mathata a mangata a sa rarahanang a nang le li-deadlocks le maemo a morabe a tloaelehileng bakeng sa khoutu e nang le likhoele tse ngata.

Melemo e eketsehileng

Haeba e le molemo, bohle ba tla hloka boithati.

Puo e boetse e re fa melemo e mengata e sa belaetseng:

  • Faele e le 'ngoe e sebetsang ka mor'a ho aha morero e nolofatsa haholo phepelo ea likopo.
  • Ho thaepa ka mokhoa o tsitsitseng le tlhahiso ea mofuta o ka fokotsa haholo palo ea liphoso khoutu ea hau, le ntle le liteko tsa ho ngola. Ke tseba baetsi ba mananeo ba etsang ntle le ho ngola liteko ho hang mme boleng ba khoutu ea bona ha bo utloe bohloko haholo.
  • Pokello e bonolo haholo le ts'ebeliso e ntle haholo ea laeborari e tloaelehileng, e nolofatsang haholo nts'etsopele ea lits'ebetso tse fapaneng.
  • Lipolelo tse tloaelehileng tsa RE2 li bolokehile ka khoele 'me li na le linako tse boletsoeng esale pele tsa ts'ebetso.
  • Laeborari e matla e tloaelehileng e lumellang boholo ba merero ho etsa ntle le meralo ea mokha oa boraro.
  • Puo e na le matla a lekaneng ho tsepamisa maikutlo bothateng ho e-na le mokhoa oa ho bo rarolla, leha ho le joalo e tlaase ho lekana hore bothata bo ka rarolloa ka katleho.
  • Sistimi ea Go eco e se e ntse e na le lisebelisoa tse ntlafalitsoeng ka ntle ho lebokose bakeng sa liketsahalo tsohle: liteko, litokomane, taolo ea sephutheloana, li-linter tse matla, tlhahiso ea khoutu, sebui sa maemo a morabe, jj.
  • Go version 1.11 e hlahisitse tsamaiso e hahelletsoeng ea ho itšetleha ka semantic, e hahiloeng holim'a moamoheli o tsebahalang oa VCS. Lisebelisoa tsohle tse etsang Go ecosystem li sebelisa lits'ebeletso tsena ho khoasolla, ho aha, le ho kenya khoutu ho tsoa ho tsona ka nako e le 'ngoe. Mme hoo ho hotle. Ha ho fihla mofuta oa 1.11, bothata ba ho fetolela liphutheloana le bona bo ile ba rarolloa ka botlalo.
  • Hobane mohopolo oa mantlha oa puo ke ho fokotsa boloi, puo e khothaletsa batho ba ntlafatsang ho etsa liphoso ka ho hlaka. 'Me sena se nepahetse, hobane ho seng joalo, se tla lebala ka ho sebetsana le liphoso ka ho feletseng. Ntho e 'ngoe ke hore bahlahisi ba bangata ba hlokomoloha ka boomo ho sebetsana le liphoso, ba khetha ho e-na le ho li sebetsana le ho fetisetsa phoso holimo.
  • Puo ha e sebelise mokhoa oa khale oa OOP, kaha ka sebopeho sa eona se hloekileng ha ho na nnete ho Go. Leha ho le joalo, sena ha se bothata ha u sebelisa li-interfaces. Ho ba sieo ha OOP ho fokotsa haholo tšitiso ea ho kena ho ba qalang.

Bonolo molemong oa sechaba

Ho bonolo ho rarahana, ho thata ho e nolofatsa.

Go e ne e etselitsoe ho ba bonolo mme e atleha sepheong seo. E ne e ngoletsoe baetsi ba mananeo ba bohlale ba utloisisang melemo ea ho sebetsa hammoho 'me ba khathetse ke ho se fele ho sa feleng ha lipuo tsa Enterprise-level. Kaha e na le meaho e nyane ea li-syntactic pokellong ea eona ea lihloliloeng, ha e na liphetoho ha nako e ntse e ea, kahoo bahlahisi ba na le nako e ngata e lokolotsoeng bakeng sa nts'etsopele, eseng bakeng sa ho ithuta ka ho sa feleng boqapi ba puo.

Likhamphani li boetse li fumana melemo e mengata: tšitiso e tlase ea ho kena e ba lumella ho fumana setsebi kapele, 'me ho se fetohe ha puo ho ba lumella ho sebelisa khoutu e tšoanang le kamora lilemo tse 10.

fihlela qeto e

Boholo ba boko bo boholo ha ho mohla bo entseng hore tlou leha e le efe e be mohapi oa Khau ea Nobel.

Bakeng sa baetsi ba mananeo bao boikhohomoso ba bona bo tlang pele ho moea oa sehlopha, hammoho le litsebi tsa thuto ea maikutlo tse ratang liphephetso tsa thuto le "bointlafatso" bo sa feleng, puo e mpe haholo, kaha ke puo e akaretsang ea sepheo se sa u lumelleng ho fumana. thabo e khahlehang ka lebaka la mosebetsi oa hau 'me u iponahatse u le setsebi ka pel'a basebetsi-'moho (hafeela re lekanya bohlale ka mekhoa ena, eseng ka IQ). Joaloka ntho e 'ngoe le e 'ngoe bophelong, ke taba ea lintho tse tlang pele bophelong ba motho. Joalo ka lintlafatso tsohle tsa bohlokoa, puo e se e fihlile hole ho tloha ho hanang hohle ho ea ho kamohelo ea bongata. Puo e bohlale ka mokhoa o bonolo, 'me, joalo ka ha u tseba, ntho e' ngoe le e 'ngoe e bohlale e bonolo!

Source: www.habr.com

Eketsa ka tlhaloso