Hobaneng ha Go Design e Fosahetse bakeng sa Basebelisi ba Smart

Likhoeling tse fetileng ke ntse ke sebelisa Go bakeng sa ts'ebetsong. Bopaki ba Moelelo (hoo e ka bang.: khoutu ho hlahloba ts'ebetso ea mohopolo) ka nako ea hae ea mahala, karolo e 'ngoe ea ho ithuta puo ea lenaneo ka boeona. Mananeo ka boeona a bonolo haholo 'me ha se morero oa sehlooho sena, empa phihlelo ea ho sebelisa Go ka boeona e tšoaneloa ke mantsoe a seng makae ka eona. E-ea o tšepisa ho ba (hoo e ka bang.: sengoloa se ngotsoeng ka 2015) puo e tsebahalang bakeng sa khoutu e tebileng ea scalable. Puo e entsoe ke Google, moo e sebelisoang ka mafolofolo. Ntlha ea bohlokoa, ke nahana ka 'nete hore moralo oa puo ea Go o fosahetse ho baetsi ba mananeo a bohlale.

E etselitsoe baetsi ba mananeo ba fokolang?

Ho bonolo haholo ho ithuta ho ea, hoo selelekela se ileng sa nkuka mantsiboeeng a mang, ka mor'a moo ke ne ke se ke ntse ke khona ho ngola ka mokhoa o atlehileng. Buka eo ke neng ke ithuta eona e bitsoang Go Selelekela sa Programming in Go (phetolelo), e fumaneha inthaneteng. Buka, joalo ka khoutu ea mohloli oa Go ka boeona, e bonolo ho e bala, e na le mehlala e metle ea khoutu, 'me e na le maqephe a ka bang 150 a ka baloang ka nako e le' ngoe. Ho nolofatsa hona hoa khatholla qalong, haholo-holo lefatšeng la mananeo le tletseng theknoloji e rarahaneng ho feta tekano. Empa qetellong, kapele kapa hamorao ho hlaha mohopolo: “Na ho hlile ho joalo?”

Google e re ho bonolo ha Go ke sebaka sa eona sa thekiso mme puo e etselitsoe tlhahiso e ngata ho lihlopha tse kholo, empa kea e belaela. Ho na le likarolo tse sieo kapa tse qaqileng haholo. 'Me tsohle ka lebaka la ho hloka tšepo ho bahlahisi, ka maikutlo a hore ha ba khone ho etsa letho le nepahetseng. 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? Litlhaloso tse 'maloa ke tsena Rob Pike (hoo e ka bang.: e mong oa baqapi-'moho ba puo ea Go):

Taba ea bohlokoa mona ke hore baetsi ba rona ba mananeo (hoo e ka bang.: Basebelisi ba Google) 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 ea bona e lokelang ho ba bonolo hore ba e utloisise le ho ithuta eona.
 
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.

Eng? Kahoo Rob Pike ha e le hantle o re baetsi ba Google ha ba hantle hakaalo, ke ka lebaka leo ba thehileng puo bakeng sa maoatla (hoo e ka bang.: dumbed down) hore ba tsebe ho etsa ketso e itseng. Ke mofuta ofe oa boikhohomoso o sheba basebetsi-'moho le uena? Haesale ke lumela hore baetsi ba Google ba khethiloe ka letsoho ho tsoa ho tse khanyang le tse ntlehali Lefatšeng. Ehlile ba ka sebetsana le ntho e thata ho feta?

Lintho tse entsoeng ka boqhetseke bo feteletseng

Ho ba bonolo ke sepheo se loketseng moralong ofe kapa ofe, 'me ho leka ho etsa ntho e bonolo ho thata. Leha ho le joalo, ha u leka ho rarolla (kapa esita le ho hlalosa) mathata a rarahaneng, ka linako tse ling ho hlokahala sesebelisoa se rarahaneng. Ho rarahana le ho rarahana ha se litšobotsi tse ntle ka ho fetisisa tsa puo ea lenaneo, empa ho na le sebaka se bohareng seo puo e ka hlahisang likhatiso tse ntle tseo ho leng bonolo ho li utloisisa le ho li sebelisa.

E sa hlahise maikutlo haholo

Ka lebaka la takatso ea ho ba bonolo, Go e haelloa ke lihahi tse nkoang e le ntho ea tlhaho ka lipuo tse ling. Sena se ka bonahala e le mohopolo o motle qalong, empa ha e le hantle se fella ka khoutu ea verbose. Lebaka la sena le tlameha ho ba le hlakileng - ho hlokahala hore ho be bonolo hore bahlahisi ba bale khoutu ea batho ba bang, empa ha e le hantle lintlafatso tsena li kotsi ho baloa. Ha ho khutsufatso ho Go: e ngata kapa ha ho letho.

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()
    flags := flag.Args()

    var text string
    var scanner *bufio.Scanner
    var err error

    if len(flags) > 0 {

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

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

        scanner = bufio.NewScanner(file)

    } else {
        scanner = bufio.NewScanner(os.Stdin)
    }

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

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

    fmt.Println(text)
}

Le hoja khoutu ena e boetse e leka ho ba e akaretsang ka hohle kamoo ho ka khonehang, lentsoe le qobelloang la Go le kena tseleng, 'me ka lebaka leo, ho rarolla bothata bo bonolo ho fella ka palo e kholo ea khoutu.

Mona, mohlala, ke tharollo ea bothata bo tšoanang ka D:

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

Hona joale ke mang ea balang haholoanyane? Ke tla fana ka voutu ea ka ho D. Khoutu ea hae e baloa haholo hobane o hlalosa liketso ka ho hlaka. D e sebelisa mehopolo e rarahaneng haholo (hoo e ka bang.: mohala o mong oa tšebetso и litempele) ho feta mohlala oa Go, empa ha ho letho le rarahaneng mabapi le ho li utloisisa.

Lihele tsa ho kopitsa

Tlhahiso e tsebahalang ea ho ntlafatsa Go ke kakaretso. Sena se tla thusa bonyane ho qoba ho kopitsa ho sa hlokahaleng khoutu ho ts'ehetsa mefuta eohle ea data. Mohlala, ts'ebetso ea ho akaretsa lenane la linomoro li ka kengoa tšebetsong ka tsela e 'ngoe haese ka ho kopitsa-ho manamisa tšebetso ea eona ea mantlha bakeng sa mofuta o mong le o mong oa palo kaofela; ha ho na tsela e 'ngoe:

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 int16Sum(list []int16) (uint64) {
    var result int16 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

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

func main() {

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

    fmt.Println(int8Sum(list8))
    fmt.Println(int16Sum(list16))
    fmt.Println(int32Sum(list32))
    fmt.Println(int64Sum(list64))
}

'Me mohlala ona ha o sebetse le mefuta e saenneng. Mokhoa ona o tlola molao-motheo oa ho se phete hape (Dry), e 'ngoe ea melao-motheo e tummeng ka ho fetisisa le e totobetseng, ho hlokomoloha e leng mohloli oa liphoso tse ngata. Hobaneng Go etsa see? Ena ke tšobotsi e mpe ea puo.

Mohlala o tšoanang ho D:

import std.stdio;
import std.algorithm;

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

E bonolo, e khabane ebile e otlolohile ho ea moo. Mosebetsi o sebelisitsoeng mona ke reduce bakeng sa mofuta oa template le predicate. Ee, sena se boetse se rarahane ho feta mofuta oa Go, empa ha ho thata hakaalo hore baetsi ba mananeo ba bohlale ba utloisise. Ke mohlala ofe oo ho leng bonolo ho o boloka le oo ho leng bonolo ho o bala?

Sistimi e bonolo ea ho feta

Ke nahana hore baetsi ba mananeo a Go ba balang sena ba tla phophoma makweba mme ba hoeletse, "O etsa phoso!" Hantle, ho na le tsela e 'ngoe ea ho etsa mosebetsi oa generic le mefuta, empa e senya ka ho feletseng tsamaiso ea mofuta!

Sheba mohlala ona oa ho lokisa puo e hlokang kelello ho rarolla bothata:

package main

import "fmt"
import "reflect"

func Reduce(in interface{}, memo interface{}, fn func(interface{}, interface{}) interface{}) interface{} {
    val := reflect.ValueOf(in)

    for i := 0; i < val.Len(); i++ {
        memo = fn(val.Index(i).Interface(), memo)
    }

    return memo
}

func main() {

    list := []int{1, 2, 3, 4, 5}

    result := Reduce(list, 0, func(val interface{}, memo interface{}) interface{} {
        return memo.(int) + val.(int)
    })

    fmt.Println(result)
}

Ts'ebetsong ena Reduce e alimiloe sehloohong Idiomatic generics ho Go (hoo e ka bang.: Ha kea fumana phetolelo, ke tla thaba ha u ka thusa ka sena). Ha e le hantle, haeba e le maele, ke tla hloea ho bona mohlala o sa reng letho. Tšebeliso interface{} - farce, 'me ka puo e hlokahalang feela ho qoba ho thaepa. Sena ke sehokelo se se nang letho 'me mefuta eohle ea se sebelisa, se lumellang bohle tokoloho e felletseng. Mokhoa ona oa ho etsa mananeo o mobe haholo, 'me ha se phetho. Mesebetsi ea acrobatic e kang ena e hloka tšebeliso ea nako ea ho sebetsa. Le Rob Pike ha a rate batho ba hlekefetsang sena, joalo ka ha a boletse ho e 'ngoe ea litlaleho tsa hae.

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

Ke nka litempele tsa D ho fapana le bohlanya bona. Motho a ka bua jwalo jwang interface{} e balehang haholoanyane kapa e bile e thaepa e bolokehile?

Mathata a Tsamaiso ea Boipheliso

Go e na le sistimi ea ho its'etleha e hahelletsoeng ka holim'a bafani ba tummeng ba amohelang batho VCS. Lisebelisoa tse tlang le Go li tseba ka lits'ebeletso tsena mme li ka khoasolla, tsa haha, le ho kenya khoutu ho tsona ka nako e le 'ngoe. Le hoja sena se le setle, ho na le phoso e kholo ka phetolelo! Ee, ehlile, o ka fumana khoutu ea mohloli ho tsoa lits'ebeletso tse joalo ka github kapa bitbucket o sebelisa lisebelisoa tsa Go, empa o ke ke oa hlakisa mofuta. 'Me hape bonolo ka litšenyehelo tsa molemo. Ha ke khone ho utloisisa mabaka a qeto e joalo.

Kamora ho botsa lipotso mabapi le tharollo ea bothata bona, sehlopha sa nts'etsopele ea Go se thehile khoele ea forum, e neng e hlalosa hore na ba ne ba tla sebetsana le taba ena joang. Keletso ea bona e ne e le ho kopitsa polokelo eohle morerong oa hau ka letsatsi le leng ebe u e tlohela "joalo ka". Ke lihele life tseo ba li nahanang? Re na le litsamaiso tse hlollang tsa ho laola liphetolelo tse nang le li-tag le tšehetso ea mefuta eo baetsi ba Go ba e hlokomolohang le ho kopitsa khoutu ea mohloli feela.

Thoto ea setso e tsoang Xi

Ka maikutlo a ka, Go e entsoe ke batho ba sebelisitseng C bophelo bohle ba bona le ba neng ba sa batle ho leka ntho e ncha. Puo e ka hlalosoa e le C e nang le mabili a eketsehileng (tšimoloho.: mabili a koetliso). Ha ho na maikutlo a macha ho eona, ntle le ts'ehetso ea ho bapisa (eo, ka tsela, e babatsehang) 'me sena ke lihlong. O na le papiso e ntle haholo ka puo e sa sebetseng, e holofetseng.

Bothata bo bong bo makatsang ke hore Go ke puo ea ts'ebetso (joalo ka tšabo e khutsitseng ea C). U qetella u ngola khoutu ka mokhoa oa ts'ebetso o ikutloang e le oa khale ebile o siiloe ke nako. Kea tseba hore lenaneo le shebaneng le lintho ha se bullet, empa ho ka ba monate ho tseba ho hlahisa lintlha ka mefuta le ho fana ka encapsulation.

Bonolo molemong oa hau

Go e ne e etselitsoe ho ba bonolo mme e atleha sepheong seo. E ne e ngoletsoe baetsi ba mananeo ba fokolang, ba sebelisa puo ea khale e le template. E tla e felletse ka lisebelisoa tse bonolo tsa ho etsa lintho tse bonolo. E bonolo ho e bala ebile e bonolo ho e sebelisa.

E bua haholo ka mantsoe, ha e khahlise, 'me e mpe ho baetsi ba mananeo ba bohlale.

Спасибо mersinvald bakeng sa liphetoho

Source: www.habr.com

Eketsa ka tlhaloso