Ihe kpatara Go Design ji dị njọ maka ndị mmemme smart

N'ime ọnwa gara aga, a na m eji Go maka mmejuputa. Ihe akaebe nke nkwenye (ihe ruru.: koodu iji nwalee ọrụ nke echiche) na oge efu ya, akụkụ ụfọdụ iji mụọ asụsụ mmemme n'onwe ya. Mmemme n'onwe ha dị mfe ma ọ bụghị ebumnuche nke isiokwu a, mana ahụmịhe nke iji Go n'onwe ya kwesịrị okwu ole na ole gbasara ya. Gaa nkwa ịbụ (ihe ruru.: edemede edere na 2015) asụsụ a ma ama maka koodu scalable siri ike. Ọ bụ Google mepụtara asụsụ a, ebe a na-eji ya arụ ọrụ. N'okpuru ala, echere m n'eziokwu na nhazi nke asụsụ Go dị njọ maka ndị mmemme smart.

Ezubere maka ndị mmemme na-adịghị ike?

Go dị mfe ịmụta, n'ụzọ dị mfe na mmeghe were m otu mgbede, mgbe nke a, m nwere ike ugbua code na-arụpụta ihe. A na-akpọ akwụkwọ m ji mụọ Go Okwu mmalite maka mmemme na Go (ntụgharị), ọ dị na ịntanetị. Akwụkwọ ahụ, dị ka koodu isi mmalite Go n'onwe ya, dị mfe ịgụ, nwere ezigbo ihe atụ koodu, ma nwee ihe dị ka ibe 150 nke enwere ike ịgụ n'otu oge. Nke a dị mfe na-enye ume ọhụrụ na mbụ, karịsịa na ụwa mmemme jupụtara na nkà na ụzụ gbagwojuru anya. Ma n’ikpeazụ, n’oge na-adịghị anya, echiche na-ebilite: “Nke a ọ̀ bụ eziokwu?”

Google na-ekwu na Go dị mfe bụ ebe a na-ere ya na a haziri asụsụ ahụ maka nrụpụta kachasị na nnukwu otu, mana enwere m obi abụọ. Enwere atụmatụ ndị na-efu efu ma ọ bụ zuru oke. Na ihe niile n'ihi enweghị ntụkwasị obi na ndị mmepe, na-eche na ha enweghị ike ime ihe ọ bụla ziri ezi. Ọchịchọ maka ịdị mfe a bụ mkpebi siri ike nke ndị na-emepụta asụsụ ahụ, na iji ghọta nke ọma ihe kpatara ya ji dị mkpa, anyị ga-aghọta mkpali nke ndị mmepe na ihe ha na-achọ ime na Go.

Ya mere, gịnị mere e ji mee ka ọ dị mfe? Nke a bụ okwu ole na ole Rob Pike (ihe ruru.: otu n'ime ndị mebere asụsụ Go):

Isi ihe dị ebe a bụ na ndị mmemme anyị (ihe ruru.: Ndị Google) abụghị ndị nchọpụta. Ha bụ, dị ka a na-achị, dị nnọọ obere, na-abịakwute anyị mgbe ha gụsịrị akwụkwọ, ikekwe ha gụrụ Java, ma ọ bụ C/C++, ma ọ bụ Python. Ha enweghị ike ịghọta nnukwu asụsụ, mana n'otu oge ahụ anyị chọrọ ka ha mepụta ngwanrọ dị mma. Ọ bụ ya mere asụsụ ha ji kwesị ịdị mfe nghọta na ịmụta asụsụ ha.
 
O kwesịrị ịma, na-ekwu okwu dịka C. Ndị mmemme na-arụ ọrụ na Google na-amalite ọrụ ha n'oge ma bụrụkwa ndị maara nke ọma na asụsụ usoro, ọkachasị ezinụlọ C. Ihe achọrọ maka nrụpụta ngwa ngwa n'asụsụ mmemme ọhụrụ pụtara na asụsụ ahụ ekwesịghị ịdị oke ike.

Kedu? Ya mere Rob Pike na-ekwu na ndị mmepe na Google adịghị mma, ọ bụ ya mere ha ji mepụta asụsụ maka ndị nzuzu (ihe ruru.: dumbed down) ka ha wee nwee ike ime ihe. Kedu ụdị mpako na-ele ndị ọrụ ibe gị anya? Ekwenyere m mgbe niile na ndị mmepe Google bụ ndị a na-ahọrọ site na nke kacha egbuke egbuke na nke kacha mma n'ụwa. N'ezie, ha nwere ike imeri ihe siri ike karị?

Artifacts nke oke ịdị mfe

Ịdị mfe bụ ihe mgbaru ọsọ kwesịrị ekwesị na nhazi ọ bụla, na ịgbalị ime ihe dị mfe siri ike. Otú ọ dị, mgbe ị na-agbalị idozi (ma ọ bụ ọbụna kwupụta) nsogbu mgbagwoju anya, mgbe ụfọdụ a na-achọ ngwá ọrụ mgbagwoju anya. Mgbagwoju anya na mgbagwoju anya abụghị akụkụ kachasị mma nke asụsụ mmemme, mana enwere etiti etiti nke asụsụ nwere ike ịmepụta abstractions mara mma nke dị mfe nghọta na iji.

Ọ bụghị nke ukwuu ikwupụta okwu

N'ihi ntinye aka ya na ịdị mfe, Go enweghị ihe arụrụ arụ nke a na-ewere dị ka ihe okike n'asụsụ ndị ọzọ. Nke a nwere ike ịdị ka ezi echiche na mbụ, mana na omume ọ na-ebute koodu verbose. Ihe kpatara nke a kwesịrị ịbụ nke doro anya - ọ dị mkpa ka ọ dịrị ndị mmepe mfe ịgụ koodu ndị ọzọ, mana n'eziokwu, ihe ndị a dị mfe na-emerụ agụ. Enweghị mbiri okwu na Go: ma ọ bụ ọtụtụ ma ọ bụ ihe ọ bụla.

Dịka ọmụmaatụ, ngwa njikwa na-agụ stdin ma ọ bụ faịlụ sitere na arụmụka ahịrị iwu ga-adị ka nke a:

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

Ọ bụ ezie na koodu a na-agbalịkwa ịbụ n'ozuzu dị ka o kwere mee, Go na-amanye verbosity na-abanye n'ụzọ, na n'ihi ya, idozi nsogbu dị mfe na-arụpụta nnukwu koodu.

Ebe a, dịka ọmụmaatụ, bụ ngwọta maka otu nsogbu ahụ 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);
    }
}

Na onye ka a na-agụ ugbu a? Aga m enye votu m D. Koodu ya bụ nke a na-agụ karịa ebe ọ na-akọwa omume ndị ahụ nke ọma. D na-eji echiche dị mgbagwoju anya karịa (ihe ruru.: oku ọrụ ọzọ и usoro) karịa na ihe atụ Go, mana ọ nweghị ihe mgbagwoju anya n'ịghọta ha.

hell nke iṅomi

Ndụmọdụ na-ewu ewu maka ịkwalite Go bụ izugbe. Nke a ga-ọbụlagonye nyere aka zere nnomi koodu na-enweghị isi iji kwado ụdị data niile. Dịka ọmụmaatụ, enwere ike ịrụ ọrụ maka ịchịkọta ndepụta integers n'ụzọ ọ bụla ọzọ karịa site n'itinye ọrụ ya bụ isi maka ụdị integer ọ bụla; ọ nweghị ụzọ ọzọ:

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

Ma ihe atụ a anaghị arụ ọrụ maka ụdị mbinye aka. Ụzọ a na-emebi kpamkpam ụkpụrụ nke ịghara imeghachi onwe gị (Kpọọ), otu n'ime ụkpụrụ ndị a ma ama na nke doro anya, na-eleghara nke bụ isi iyi nke ọtụtụ njehie. Gịnị kpatara Go ji eme nke a? Nke a bụ akụkụ dị egwu nke asụsụ.

Otu ihe atụ na D:

import std.stdio;
import std.algorithm;

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

Dị mfe, mara mma na kwụ ọtọ ruo n'ókè. Ọrụ eji ebe a bụ reduce maka ụdị template na predicate. Ee, nke a dịkwa mgbagwoju anya ọzọ karịa ụdị Go, mana ọ bụghị nke siri ike maka ndị mmemme smart ịghọta. Kedu ihe atụ dị mfe idowe ma dị mfe ịgụ?

Mfe ụdị usoro uzo

Echere m na ndị mmemme Go na-agụ nke a ga-abụ ụfụfụ n'ọnụ na-eti mkpu, "Ị na-eme ya adịghị mma!" Ọfọn, e nwere ụzọ ọzọ iji mee ka a generic ọrụ na ụdị, ma ọ na-agbaji kpamkpam ụdị usoro!

Leba anya n'ihe atụ a nke idozi asụsụ nzuzu iji rụọ ọrụ gburugburu nsogbu ahụ:

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

Nke a mmejuputa iwu Reduce e si n'akụkọ ahụ gbaziri Ọdịiche dị iche iche na Go (ihe ruru.: Enweghị m ike ịchọta nsụgharị ahụ, m ga-enwe obi ụtọ ma ọ bụrụ na ị nyere aka na nke a). Ọfọn, ọ bụrụ na ọ bụ akpaala okwu, ọ ga-amasị m ịhụ ihe atụ na-abụghị nke akpaala okwu. Ojiji interface{} - a face, na n'asụsụ ọ chọrọ nanị iji gafere dee. Nke a bụ ihe efu interface na ụdị niile mejuputa ya, na-enye ohere nnwere onwe zuru oke maka onye ọ bụla. Ụdị mmemme a jọrọ njọ nke ukwuu, nke ahụ abụghịkwa ihe niile. Acrobatic feats dị ka ndị a chọrọ iji nlegharị anya n'oge. Ọbụna Rob Pike adịghị amasị ndị na-emegbu nke a, dị ka o kwuru n'otu n'ime akụkọ ya.

Nke a bụ ngwá ọrụ dị ike nke kwesịrị iji nlezianya mee ihe. Ekwesịrị izere ya ma ọ bụrụ na ọ dị mkpa.

M ga-ewere ndebiri D kama nzuzu a. Kedu ka onye ọ bụla ga-esi kwuo nke ahụ interface{} karịa ịgụ ma ọ bụ ọbụna pịnye nchekwa?

Ahụhụ nke njikwa ịdabere na ya

Go nwere usoro ndabere arụnyere arụnyere n'elu ndị na-eweta nnabata na-ewu ewu VCS. Ngwa ndị na-abịa na Go maara maka ọrụ ndị a ma nwee ike ibudata, wuo ma wụnye koodu site na ha n'otu oge. Ọ bụ ezie na nke a dị ukwuu, enwere nnukwu ntụpọ na nsụgharị! Ee, ọ bụ eziokwu na ị nwere ike nweta koodu isi mmalite site na ọrụ dị ka github ma ọ bụ bitbucket site na iji ngwaọrụ Go, mana ị nweghị ike ịkọwapụta ụdị ya. Na ọzọ mfe na-efu nke uru. Enweghị m ike ịghọta ezi uche nke mkpebi dị otú ahụ.

Mgbe ha jụrụ ajụjụ gbasara ngwọta maka nsogbu a, ndị otu mmepe Go kere eri forum, bụ́ nke kọwapụtara otú ha ga-esi metụta okwu a. Ndụmọdụ ha bụ ka ị detuo ihe niile n'ime ọrụ gị otu ụbọchị wee hapụ ya “dị ka ọ dị.” Gịnị ka hell ha na-eche? Anyị nwere sistemụ njikwa ụdị dị ịtụnanya nwere nnukwu mkpado na nkwado ụdị nke ndị okike Go na-eleghara anya wee detuo koodu isi mmalite.

Akpa omenala sitere na Xi

N'uche nke m, Go bụ ndị ji C ndụ ha niile na ndị na-achọghị ịnwale ihe ọhụrụ mepụtara. Enwere ike ịkọwa asụsụ ahụ dị ka C nwere wiil ndị ọzọ (Orig.: wiil ọzụzụ). Enweghị echiche ọhụrụ n'ime ya, ma e wezụga nkwado maka myirịta (nke, n'ụzọ, dị ebube) na nke a bụ ihe ihere. Ị nwere ezigbo myirịta n'asụsụ a na-adịghị eji eme ihe, ngwọrọ.

Nsogbu ọzọ na-akụda mmụọ bụ na Go bụ asụsụ usoro (dị ka egwu nkịtị nke C). Ị na-emecha dee koodu n'ụdị usoro nke na-adị ka ochie na ihe ochie. Amaara m na mmemme gbadoro ụkwụ n'ihe abụghị mgbọ ọlaọcha, mana ọ ga-adị mma ịnwe ike ịkọwapụta nkọwa n'ime ụdị wee wepụta ihe mkpuchi.

Dị mfe maka uru nke gị

Emebere Go ka ọ dị mfe ma ọ ga-aga nke ọma na ebumnuche ahụ. Edere ya maka ndị mmemme na-adịghị ike, na-eji asụsụ ochie dị ka ndebiri. Ọ na-abịa zuru ezu na ngwaọrụ dị mfe iji mee ihe dị mfe. Ọ dị mfe ịgụ na mfe iji.

Ọ dị oke ọnụ, enweghị mmasị na ọ dị njọ maka ndị mmemme nwere ọgụgụ isi.

Achọpụta mersinvald maka ndezi

isi: www.habr.com

Tinye a comment