Aisea e leaga ai le alu mo le au fai polokalame le atamai

O le tusiga na tusia o se tali i se faʻasalalauga muamua antipodean article.

Aisea e leaga ai le alu mo le au fai polokalame le atamai

I le lua-sili tausaga ua tuana'i sa ou fa'aogaina le Go e fa'atino ai se fa'aumau fa'apitoa RADIUS ma se faiga tau pili. I luga o le ala, o loʻo ou aʻoaʻoina le lavelave o le gagana lava ia. O polokalame lava ia e matua faigofie lava ma e le o le faʻamoemoega o lenei tusiga, ae o le poto masani o le faʻaaogaina o le Go lava ia e tatau ai ni nai upu i lona puipuiga. Ua fa'atuputeleina le gagana fa'aautu mo le mamafa, fa'afuainumera code. O le gagana na faia e Google, lea o lo'o fa'aaogaina malosi ai. O le laina pito i lalo, ou te manatu faamaoni o le mamanu o le gagana Go e leaga mo UNintelligent programmers.

Fuafua mo tagata fai polokalame vaivai?

E tautala le au vaivai i faafitauli. O le tautala malosi e uiga i manatu ma miti...

O le alu e matua faigofie lava ona aʻoaʻoina, e matua faigofie lava e mafai ona e faitauina le code e toetoe lava leai se aʻoaʻoga. O lenei vaega o le gagana o loʻo faʻaaogaina i le tele o kamupani faʻavaomalo, pe a faitau le code faʻatasi ma tagata tomai faapitoa e le o ni autu (pule, tagata faʻatau, ma isi). E faigofie tele lenei mea mo metotia e pei o Design Driven Development.
E oo lava i le au fai polokalame fou e amata ona faia ni tulafono lelei pe a uma le vaiaso pe lua. O le tusi na ou suʻesuʻeina o le "Go Programming" (saunia e Mark Summerfield). E lelei tele le tusi, e paʻi atu i le tele o nuances o le gagana. A maeʻa gagana faʻalavelave e pei o Java, PHP, o le leai o se togafiti faʻamalosi e faʻafouina. Ae i se taimi mulimuli ane, o le tele o tagata fai polokalame faʻatapulaʻaina o loʻo i ai le manatu o le faʻaaogaina o metotia tuai i se fanua fou. Pe e mana'omia moni ea lenei mea?

Na faia e Rob Pike (le tagata su'esu'e autu o le gagana) le gagana Go o se gagana fa'apisinisi e faigofie ona malamalama ma aoga e fa'aoga. O le gagana ua mamanuina mo le maualuga o le gaosiga i 'au tetele ma e leai se masalosalo i ai. O le tele o tagata fai polokalame fou e faitio ona o le tele o vaega o loʻo latou misia. O lenei manaʻoga mo le faʻafaigofie o se filifiliga faʻapitoa a le au tusitala o le gagana, ma ina ia malamalama atoatoa pe aisea na manaʻomia ai, e tatau ona tatou malamalama i le faʻaosofia o le au atinaʻe ma mea na latou taumafai e ausia i Go.

Aisea la na faafaigofie ai? O nisi nei o upusii mai ia Rob Pike:

O le manatu autu iinei e faapea o matou tagata fai polokalame e le o ni tagata suʻesuʻe. O i latou, e pei o se tulafono, e laiti, o mai ia i matou pe a uma a latou suʻesuʻega, masalo na latou suʻesuʻeina Java, poʻo C/C++, poʻo Python. E le mafai ona latou malamalama i se gagana lelei, ae i le taimi lava e tasi matou te manana'o latou te faia ni polokalama lelei. O le mafuaaga lena e tatau ai ona faigofie ona malamalama ma aoao le gagana.

E tatau ona masani o ia, e tutusa le tautala ma C. O tagata fai polokalame e galulue i Google e vave amata a latou galuega ma e masani ona masani i gagana fa'atonu, aemaise le aiga C. O le mana'oga mo le vave fa'atupuina i se gagana fa'apolokalame fou o lona uiga e le tatau ona fa'a'ese'ese le gagana.

O upu poto, a ea?

Mea Fa'afaigofie

O le faigofie o se tulaga e tatau ai mo le matagofie. Lev Tolstoy.

O le fa'afaigofieina o se tasi lea o sini sili ona taua i so'o se mamanu. E pei ona e iloa, o se galuega lelei atoatoa e le o se poloketi e leai se mea e faʻaopoopo, ae o se tasi e leai se mea e aveese. E talitonu le toʻatele o tagata ina ia foʻia (pe faʻaalia foʻi) faafitauli lavelave, e manaʻomia se meafaigaluega lavelave. Ae peitai, e leai. Se'i fai le gagana PERL mo se fa'ata'ita'iga. Na talitonu tagata su'esu'e i gagana e tatau i le tagata fai polokalame ia le itiiti ifo ma le tolu ni auala eseese e foia ai se faafitauli se tasi. E ese le auala na uia e le au suʻesuʻe o le gagana Go; na latou filifili e tasi le auala, ae o se auala lelei tele, na lava e ausia ai le sini. O lenei faiga e iai sona faavae taua: na o le pau lava le auala e faigofie ona aʻoaʻoina ma faigata ona faʻagaloina.

O le to'atele o tagata malaga e faitio e le o iai ni fa'amatalaga aulelei i le gagana. Ioe, e moni lenei mea, ae o se tasi lea o itu taua o le gagana. O le gagana o lo'o i ai se fa'ataulāitu la'ititi - o lea e leai se poto loloto e mana'omia e faitau ai le polokalame. Ae mo le faʻaogaina o le code, e leʻo se faʻafitauli. O se polokalame Golang e lelei ona tusia e faitau sa'o, e la'ititi pe leai foi se fausaga. E le gata i lea, o le saoasaoa o le faitauina o se polokalama o se faasologa o le tele e sili atu nai lo le saoasaoa o le tusiaina. Afai e te manatu o loʻo i ai uma le faʻailoga o loʻo i ai le faʻatulagaina o toniga (faʻaaogaina le faʻatonuga o le gofmt), ona faitau lea o nai laina faʻaopoopo e le o se faʻafitauli.

E le fa'aalia tele

E le talia e faatufugaga pe a taofiofia lona saolotoga. O le sa'o atoatoa e le o sana matafaioi.

Ona o le manaʻo mo le faigofie, e leai ni mea e fausia i isi gagana e manatu o se mea masani e tagata masani ia i latou. I le taimi muamua atonu e fai si faigata, ae e te matauina o le polokalama e sili atu ona faigofie ma sili atu le manino e faitau.

Mo se faʻataʻitaʻiga, o se faʻaoga faʻamafanafanaga e faitau stdin poʻo se faila mai faʻamatalaga laina laina e foliga mai:

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)
}

Ole fofo ile faafitauli lava e tasi ile D, e ui lava e foliga puupuu, e le faigofie ona faitau

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);
    }
}

Seoli o kopi

E tauave e le tagata seoli i totonu ia te ia lava. Matini Luteru.

E amata ona faitio i taimi uma e uiga i le Go i tulaga o le le lava o generics. Ina ia foia lenei mataupu, o le toʻatele oi latou e faʻaogaina le kopi saʻo. Mo se faʻataʻitaʻiga, o se galuega mo le faʻaputuina o se lisi o numera, o ia o le a avea ma tagata tomai faapitoa e talitonu e le mafai ona faʻatinoina le galuega i se isi lava auala nai lo le kopi-faʻapipiʻi faigofie mo ituaiga faʻamaumauga taʻitasi.

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))
}

O le gagana ua lava auala e faatino ai ia fausaga. Mo se faʻataʻitaʻiga, o polokalame lautele e lelei.

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))
}

Ma, e ui o la matou tulafono na foliga mai e fai si umi atu nai lo le mataupu muamua, ae ua avea ma lautele. O le mea lea, o le a le faigata ia i tatou ona faʻatinoina galuega faʻatusa uma.

E toʻatele o le a fai mai o se polokalame i le D e foliga faʻapuupuu, ma o le a saʻo.

import std.stdio;
import std.algorithm;

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

Ae ui i lea, e naʻo le puʻupuʻu, ae le sili atu le saʻo, talu ai o le faʻatinoga o le D e le amanaʻia atoatoa le faʻafitauli o le faʻaogaina o mea sese.

I le olaga moni, a'o fa'atupula'ia le lavelave o manatu, e vave ona va'ai le va. E sili atu ona vave tapunia le va pe a manaʻomia le faia o se gaioiga e le mafai ona faʻaogaina i le faʻaogaina o gagana masani.

I le tulaga o le faatumauina, faʻalauteleina, ma le faitau, i loʻu manatu, o le Go gagana e manumalo, e ui lava e leiloa ile verbosity.

O polokalame fa'alautele i nisi tulaga e maua mai ai fa'amanuiaga e le fa'afitia. O loʻo faʻaalia manino lenei mea i le faʻasologa o afifi. O lea la, e fa'avasega so'o se lisi, na'o le mana'omia o le fa'atinoina o le sort.Interface 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)
}

Afai e te faia so'o se poloketi fa'apogai matala ma fa'agaoioi le grep "interface{}" -R command, o le a e va'ai pe fa'afia ona fa'aogaina feso'ota'iga fenumia'i. O uo vavalalata o le a vave ona fai mai o nei mea uma e mafua ona o le le lava o generics. Peitaʻi, e lē o taimi uma lenā e tupu ai. Se'i fai le DELPHI o se fa'ata'ita'iga. E ui lava i le i ai o nei lava generics, o loʻo i ai se ituaiga VARIANT faʻapitoa mo gaioiga faʻatasi ai ma faʻamaumauga faʻapitoa. E fa'apea fo'i le gagana Go.

Mai se fana i manu iti

Ma o le straitjacket e tatau ona fetaui ma le tele o le valea. Stanislav Lec.

O le tele o tagata fiafia e ono fai mai o Go ei ai se isi masini mo le fatuina o generics - manatunatuga. Ma o le a saʻo ... ae naʻo ni mea e seasea tupu.

Ua lapataia i tatou e Rob Pike:

O se meafaigaluega mamana lea e tatau ona faʻaaogaina ma le faʻaeteete. E tatau ona aloese mai ai sei vagana ua matua manaomia.

Ua taʻu mai e Wikipedia ia i tatou mea nei:

Manatunatu e faasino i le faagasologa lea e mafai ai e se polokalame ona mataituina ma suia lona lava fausaga ma amioga i le taimi o le faatinoga. O le polokalame faʻataʻitaʻiga o loʻo faʻavaeina mafaufauga e taʻua o polokalame faʻafouga. Ole ituaiga lea ole metaprogramming.

Ae ui i lea, e pei ona e iloa, e tatau ona e totogia mea uma. I lenei tulaga o le:

  • faigata i le tusiaina o polokalame
  • saoasaoa o le faatinoga o polokalame

O le mea lea, e tatau ona faʻaogaina ma le faʻaeteete le mafaufau, e pei o se auupega tele-caliber. O le fa'aogaina o mafaufauga le mafaufau e o'o atu ai i polokalame e le mafai ona faitauina, fa'aletonu faifai pea ma maualalo le saoasaoa. Na'o le mea mo se tagata fa'apolokalame snob e mafai ona fa'aalia lana fa'ailoga i luma o isi, sili atu ona fa'ata'ita'i ma tauagafau pa'aga.

O ato fa'ale-aganu'u mai Xi? Leai, mai le tele o gagana!

Faatasi ai ma le tamaoaiga, o aitalafu foi e totoe i suli.

E ui i le mea moni o le toʻatele e talitonu o le gagana e faʻavae atoa i le C measina, e le o le tulaga lea. O le gagana e aofia ai le tele o vaega o gagana sili ona lelei polokalame.

Faʻailoga

Muamua, o le syntax o fausaga kalama e faʻavae i luga o le syntax o le gagana C. Ae ui i lea, o le gagana DELPHI sa i ai foi se aafiaga taua. O le mea lea, matou te vaʻai ai o faʻamaufaʻailoga faʻapipiʻi, lea e matua faʻaitiitia ai le mafai ona faitau o le polokalame, ua aveese atoa. O lo'o iai fo'i i le gagana le fa'aogaina o le “:=” fa'apitoa i le gagana DELPHI. O le manatu o afifi e nono mai gagana pei ole ADA. O le ta'utinoga o fa'alapotopotoga e le'i fa'aaogaina e nono mai le gagana PROLOG.

Semantics

O afifi na faʻavae i luga o semantics o le gagana DELPHI. O afifi ta'itasi e fa'apipi'i fa'amaumauga ma fa'ailoga ma o lo'o iai fa'alapotopotoga tumaoti ma fa'alapotopotoga lautele. O lenei mea e mafai ai e oe ona faʻaitiitia le faʻaogaina o pusa i se mea maualalo.

O le fa'atinoga o le fa'atinoga e ala i le tu'uina atu na nono mai i le gagana DELPHI.

Tuufaatasiga

E le o se mafuaaga e i ai se tala malie: Go na atiaʻe aʻo faʻapipiʻiina se polokalame C. O se tasi o malosiaga o le gagana o lona tu'ufa'atasiga vave tele. O le manatu na nono mai le gagana DELPHI. O pusa Go ta'itasi e fetaui ma se module DELPHI. O nei afifi e toe tuufaatasia pe a mana'omia moni lava. O le mea lea, a maeʻa le isi faʻataʻitaʻiga, e te le manaʻomia le tuʻufaʻatasia o le polokalama atoa, ae toe faʻapipiʻi naʻo afifi ma afifi e faʻalagolago i nei pusa ua suia (ma e oʻo lava i lena taimi, pe a fai ua suia fesoʻotaʻiga afifi).

Fausia tulaga maualuga

O le gagana o loʻo i ai le tele o fausaga maualuga maualuga e leai se auala e fesoʻotaʻi ma gagana maualalo e pei o C.

  • manoa
  • laulau fa'asa
  • fasi
  • O le taina o pato e nono mai gagana e pei o RUBY (lea, o le mea e leaga ai, e toʻatele e le malamalama pe faʻaaogaina i lona gafatia atoatoa).

Puleaina o manatua

O le puleaina o manatua e masani lava ona mana'omia se tala ese. Afai i gagana e pei o le C ++, e tuʻuina atoa le pule i le tagata atiaʻe, ona faʻaaogaina lea i gagana mulimuli ane e pei o DELPHI, se faʻataʻitaʻiga o faʻataʻitaʻiga. Faatasi ai ma lenei faiga, e leʻi faʻatagaina faʻamatalaga faʻataʻamilosaga, talu ai na faʻatupuina fuifui matuaoti, ona fausia lea e Go i totonu o ia fuifui (pei o C #). E le gata i lea, o le lapisi lapisi e sili atu le lelei nai lo le tele o faʻatinoga o loʻo iloa nei ma e mafai ona faʻaaogaina mo le tele o galuega moni. O le gagana lava ia e iloa tulaga pe a mafai ona fa'asoa se tau e teu ai se fesuiaiga i luga o le faaputuga. O lenei mea e faʻaitiitia ai le uta i le pule manatua ma faʻateleina le saoasaoa o le polokalama.

Concurrency ma Concurrency

O le tutusa ma le faatauva o le gagana e le mafai ona viia. E leai se gagana maualalo e mafai ona tauva mamao ma Go. Ina ia saʻo, e taua le matauina o le faʻataʻitaʻiga e leʻi fatuina e le au tusitala o le gagana, ae na o le nono mai le gagana lelei tuai ADA. O le gagana e mafai ona faʻatautaia le faitau miliona o fesoʻotaʻiga tutusa e faʻaaoga uma ai PPU, aʻo iai se faʻatonuga o le tele o faʻafitauli faʻalavelave faʻatasi ma faʻamaʻi ma tulaga taʻaloga e masani mo code multi-threaded.

Fa'amanuiaga fa'aopoopo

Afai e aoga, o le a le manatu faapito tagata uma.

E maua ai fo'i e le gagana le tele o fa'amanuiaga e le masalomia:

  • O se faila faila e tasi pe a uma ona fausia le poloketi e faʻafaigofie tele le faʻapipiʻiina o talosaga.
  • O le taina ma le ituaiga fa'ailoga e mafai ona fa'aitiitia ai le numera o mea sese i lau code, e tusa lava pe leai ni su'ega tusitusi. Ou te iloa nisi tagata fai polokalame latou te faia e aunoa ma ni suʻega tusitusi ma o le lelei o latou code e le afaina tele.
  • E matua faigofie lava fa'aputuga fa'atutusa ma sili ona feavea'i o le faletusi fa'ata'atia, lea e matua fa'afaigofieina ai le atina'eina o fa'aoga feso'ota'iga.
  • O fa'aaliga masani a RE2 e saogalemu i filo ma e iai taimi e mafai ona fa'atinoina.
  • O se faletusi tulaga mamana e mafai ai e le tele o galuega faatino ona fai e aunoa ma ni auivi vaega lona tolu.
  • O le gagana e lava le malosi e taulaʻi atu ai i le faʻafitauli nai lo le auala e foia ai, ae maualalo le tulaga e mafai ai ona foia lelei le faʻafitauli.
  • O le Go eco system ua uma ona i ai meafaigaluega atiaʻe mai le atigipusa mo taimi uma: suʻega, faʻamaumauga, faʻapipiʻiina o pusa, liters mamana, faʻasologa o tulafono, suʻesuʻega tulaga, ma isi.
  • Go version 1.11 fa'afeiloa'i le fa'atonuga fa'alagolago i semantic, fausia i luga o le VCS talimalo lauiloa. O meafaigaluega uma e fausia ai le Go ecosystem e faʻaogaina nei auʻaunaga e sii mai ai, fausia, ma faʻapipiʻi le code mai ia i latou i le tasi pa'ū. Ma e manaia tele. Faatasi ai ma le taunuu mai o le version 1.11, o le faafitauli i le faʻaliliuina o afifi na foia atoatoa.
  • Talu ai o le manatu autu o le gagana o le faʻaitiitia o togafiti faʻataulāitu, o le gagana e faʻaosofia ai le au atiaʻe e faia faʻamatalaga sese. Ma e saʻo lenei, aua a leai, o le a naʻo le faʻagaloina o le faʻaogaina o mea sese. O le isi mea o le tele o tagata atiaʻe e le amanaiaina ma le loto i ai le faʻaogaina o mea sese, e sili nai lo le faʻagaioiina e na o le tuʻuina atu o le mea sese i luga.
  • E le faʻaaogaina e le gagana le auala masani o le OOP, talu ai i lona foliga mama e leai se virtuality i Go. Ae ui i lea, e le o se faʻafitauli pe a faʻaogaina fesoʻotaʻiga. O le leai o le OOP e matua fa'aitiitia ai le pa e ulufale ai mo tagata amata.

Faigofie mo manuia lautele

E faigofie ona lavelave, faigata ona faafaigofie.

O le alu na mamanuina ina ia faigofie ma e manuia i lena sini. Na tusia mo tagata fai polokalame atamai e malamalama i aoga o le galulue faatasi ma ua fiu i le fesuisuiai e le gata o gagana tulaga o Enterprise. O le i ai o se seti laʻititi o fausaga faʻapipiʻi i totonu o ana auupega, e toetoe lava a le mafai ona suia i le taimi, o lea e tele ai le taimi e faʻasaʻolotoina ai e le au atinaʻe mo le atinaʻe, ae le o le suʻesuʻeina e le gata o le gagana fou.

E maua foi e Kamupani le tele o tulaga lelei: o se pa puipui maualalo e mafai ai ona latou maua vave se tagata tomai faapitoa, ma o le le suia o le gagana e mafai ai ona latou faʻaogaina le code tutusa e tusa lava pe 10 tausaga.

iʻuga

Ole tele ole fai'ai e le'i faia lava se elefane e manumalo ile Nobel Prize.

Mo na tagata fai polokalame e sili atu lo latou lava manatu nai lo le agaga o le 'au, faʻapea foʻi ma le au failotu e fiafia i luitau tau aʻoaʻoga ma le le gata o le "faʻaleleia o le tagata lava ia", o le gagana e matua leaga lava, talu ai o se gagana tufuga lautele e le faʻatagaina oe e maua. fiafiaga fa'alelei mai le taunu'uga o lau galuega ma fa'aali oe lava fa'apitoa i luma o au pa'aga (pe a tatou fuaina le atamai i nei ta'iala, ae le o le IQ). E pei o mea uma i le olaga, o se mataupu o mea e faamuamua e le tagata lava ia. E pei lava o fa'afouga aoga uma, o le gagana ua leva ona sau mai le fa'afiti lautele i le taliaina tele. O le gagana e atamai i lona faigofie, ma, e pei ona e iloa, o mea uma poto e faigofie!

puna: www.habr.com

Faaopoopo i ai se faamatalaga