Vim Li Cas Mus Tsim Tsis Zoo rau Cov Neeg Ua Haujlwm Txawj Ntse

Lub hli dhau los kuv tau siv Go rau kev siv. Ntawv Ceeb Toom ntawm Kev Ceeb Toom (kwv yees.: code los ntsuam xyuas lub functionality ntawm ib lub tswv yim) nyob rau hauv nws lub sij hawm dawb, ib nrab mus kawm cov lus programming nws tus kheej. Cov kev pab cuam lawv tus kheej yog qhov yooj yim heev thiab tsis yog lub hom phiaj ntawm tsab xov xwm no, tab sis kev paub ntawm kev siv Go nws tus kheej tsim nyog ob peb lo lus hais txog nws. Mus cog lus tias yuav yog (kwv yees.: tsab xov xwm sau nyob rau hauv 2015) ib hom lus nrov rau loj scalable code. Cov lus tau tsim los ntawm Google, qhov twg nws tau siv zog. Hauv qab kab, Kuv ua siab ncaj xav tias qhov tsim ntawm Go lus yog qhov tsis zoo rau cov programmers ntse.

Tsim los rau cov programmer tsis muaj zog?

Mus yog qhov yooj yim heev rau kev kawm, yooj yim heev uas qhov kev taw qhia coj kuv ib yav tsaus ntuj, tom qab uas kuv tuaj yeem tau code tsim tawm. Phau ntawv uas kuv siv los kawm Go hu ua Kev Taw Qhia rau Programming hauv Go (txhais lus), nws muaj nyob online. Phau ntawv, zoo li Go qhov chaws nws tus kheej, nyeem tau yooj yim, muaj cov qauv zoo, thiab muaj txog 150 nplooj ntawv uas tuaj yeem nyeem hauv ib qho zaum. Qhov kev simplicity no yog refreshing thaum xub thawj, tshwj xeeb tshaj yog nyob rau hauv lub programming ntiaj teb no uas muaj ntau tshaj-them technology. Tab sis thaum kawg, tsis ntev los sis tom qab qhov kev xav tshwm sim: "Puas yog qhov no tiag tiag?"

Google thov Go qhov yooj yim yog nws qhov muag thiab cov lus tau tsim los rau kev tsim khoom ntau tshaj plaws hauv pab pawg loj, tab sis kuv tsis ntseeg nws. Muaj cov yam ntxwv uas ploj lawm los yog cov ncauj lus kom ntxaws heev. Thiab tag nrho vim tsis muaj kev ntseeg siab rau cov neeg tsim khoom, nrog kev xav tias lawv tsis muaj peev xwm ua tau zoo. Qhov kev ntshaw rau kev yooj yim no yog kev txiav txim siab los ntawm cov lus tus tsim qauv, thiab txhawm rau nkag siab tias vim li cas nws thiaj li xav tau, peb yuav tsum nkag siab txog kev txhawb siab ntawm cov neeg tsim khoom thiab lawv tau sim ua kom tiav hauv Go.

Yog li vim li cas nws thiaj li yooj yim? Nov yog ob peb nqe lus Rob Pike (kwv yees.: ib qho ntawm cov neeg tsim khoom ntawm Go language):

Lub ntsiab lus tseem ceeb ntawm no yog peb cov programmers (kwv yees.: Googlers) tsis yog cov kws tshawb fawb. Lawv, raws li txoj cai, cov hluas, tuaj rau peb tom qab kawm, tej zaum lawv kawm Java, lossis C / C ++, lossis Python. Lawv tsis tuaj yeem nkag siab cov lus zoo, tab sis tib lub sijhawm peb xav kom lawv tsim software zoo. Yog li ntawd, lawv cov lus yuav tsum yooj yim rau lawv to taub thiab kawm.
 
Nws yuav tsum paub, hais lus zoo ib yam li C. Cov programmers ua haujlwm hauv Google pib lawv txoj haujlwm ntxov thiab feem ntau paub txog cov lus txheej txheem, tshwj xeeb yog tsev neeg C. Qhov yuav tsum tau ua kom muaj txiaj ntsig sai hauv cov lus programming tshiab txhais tau hais tias cov lus yuav tsum tsis txhob dhau mus dhau.

Dab tsi? Yog li Rob Pike yog qhov pib hais tias cov neeg tsim khoom ntawm Google tsis zoo, yog vim li cas lawv tsim ib hom lus rau idiots (kwv yees.: dumbed down) kom lawv muaj peev xwm ua tau ib yam dab tsi. Ua li cas khav theeb saib koj cov npoj yaig? Kuv ib txwm ntseeg tias Google cov neeg tsim khoom tau xaiv los ntawm qhov ci ntsa iab thiab zoo tshaj plaws hauv ntiaj teb. Muaj tseeb lawv muaj peev xwm daws tau tej yam nyuaj dua?

Artifacts ntawm ntau simplicity

Ua kom yooj yim yog lub hom phiaj tsim nyog hauv txhua qhov kev tsim, thiab sim ua ib yam dab tsi yooj yim yog qhov nyuaj. Txawm li cas los xij, thaum sim daws (lossis nthuav qhia) cov teeb meem nyuaj, qee zaum xav tau cov cuab yeej nyuaj. Complexity thiab intricacy tsis yog qhov zoo tshaj plaws cov yam ntxwv ntawm ib tug programming lus, tab sis muaj ib tug nruab nrab hauv av uas cov lus muaj peev xwm tsim elegant abstractions uas yooj yim to taub thiab siv.

Tsis heev nthuav

Vim nws txoj kev mob siab rau kev yooj yim, Go tsis muaj kev tsim kho uas pom tau tias yog ntuj tsim hauv lwm hom lus. Qhov no tej zaum yuav zoo li ib lub tswv yim zoo thaum xub thawj, tab sis hauv kev xyaum nws ua rau verbose code. Yog vim li cas rau qhov no yuav tsum pom tseeb - nws yuav tsum yooj yim rau cov neeg tsim khoom los nyeem lwm tus neeg cov cai, tab sis qhov tseeb cov kev simplifications tsuas yog ua mob rau kev nyeem ntawv. Tsis muaj cov ntawv luv luv hauv Go: ntau lossis tsis muaj dab tsi.

Piv txwv li, lub console utility uas nyeem stdin los yog ib cov ntaub ntawv los ntawm cov kab lus sib cav yuav zoo li no:

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

Txawm hais tias txoj cai no tseem sim ua kom dav npaum li qhov ua tau, Go's yuam verbosity tau txais txoj hauv kev, thiab vim li ntawd, kev daws teeb meem yooj yim ua rau muaj ntau tus lej.

Ntawm no, piv txwv li, yog kev daws teeb meem tib yam hauv 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);
    }
}

Thiab leej twg nyeem tau ntau dua tam sim no? Kuv mam li muab kuv qhov kev pov npav rau D. Nws txoj cai nyeem tau ntau dua vim nws piav qhia cov kev ua kom meej dua. D siv ntau lub tswv yim nyuaj (kwv yees.: lwm txoj haujlwm hu ΠΈ qauv) dua li hauv Go piv txwv, tab sis tsis muaj dab tsi nyuab txog kev nkag siab lawv.

Ntuj raug txim ntawm luam

Cov lus qhia nrov rau kev txhim kho Go yog qhov dav dav. Qhov no tsawg kawg yuav pab kom tsis txhob muaj qhov tsis tsim nyog luam ntawm cov lej los txhawb txhua hom ntaub ntawv. Piv txwv li, kev ua haujlwm rau kev suav cov npe ntawm cov lej tuaj yeem siv tsis muaj lwm txoj hauv kev los ntawm kev luam-pas nws cov haujlwm yooj yim rau txhua hom integer; tsis muaj lwm txoj hauv kev:

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

Thiab qhov piv txwv no tsis txawm ua haujlwm rau hom kos npe. Txoj hauv kev no ua txhaum txoj cai ntawm tsis rov ua koj tus kheej (QHUAV), ib qho ntawm cov ntsiab lus nto moo tshaj plaws thiab pom tseeb, tsis quav ntsej uas yog qhov ua rau ntau qhov yuam kev. Vim li cas Mus Ua li no? Qhov no yog ib qho txaus ntshai ntawm cov lus.

Ib yam piv txwv ntawm D:

import std.stdio;
import std.algorithm;

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

Yooj yim, elegant thiab ncaj nraim mus rau lub ntsiab lus. Cov haujlwm siv ntawm no yog reduce rau template hom thiab predicate. Yog lawm, qhov no yog qhov nyuaj dua li Go version, tab sis tsis nyuaj rau cov programmers ntse kom nkag siab. Tus qauv twg yooj yim rau khaws thiab nyeem tau yooj yim dua?

Yooj yim hom system bypass

Kuv xav tias Go programmers nyeem qhov no yuav ua npuas ncauj ntawm lub qhov ncauj thiab qw, "Koj ua tsis yog lawm!" Zoo, muaj lwm txoj hauv kev los ua kom muaj nuj nqi thiab hom, tab sis nws tawg tag nrho cov kab ke!

Ua tib zoo saib ntawm qhov piv txwv no ntawm kev kho lus ruam los ua haujlwm nyob ib puag ncig qhov teeb meem:

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

Qhov kev siv no Reduce tau qiv los ntawm tsab xov xwm Idiomatic generics hauv Go (kwv yees.: Kuv nrhiav tsis tau cov lus txhais, Kuv yuav zoo siab yog tias koj pab nrog qhov no). Zoo, yog hais tias nws yog idiomatic, kuv yuav ntxub pom ib qho piv txwv uas tsis yog idiomatic. Kev siv interface{} - ib tug farce, thiab hauv hom lus nws tsuas yog xav tau los hla kev ntaus ntawv. Qhov no yog qhov khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob khoob. Qhov style ntawm programming yog qhov phem heev, thiab tsis yog txhua yam. Acrobatic feats zoo li cov no xav tau kev siv lub sijhawm ua haujlwm. Txawm tias Rob Pike tsis nyiam cov tib neeg uas tsim txom qhov no, raws li nws tau hais hauv ib qho ntawm nws cov lus ceeb toom.

Qhov no yog ib qho cuab yeej muaj zog uas yuav tsum tau siv nrog ceev faj. Nws yuav tsum tau zam tshwj tsis yog tias tsim nyog nruj me ntsis.

Kuv yuav coj D templates es tsis yog qhov no. Leej twg hais tau li ntawd interface{} nyeem tau ntau dua lossis txawm tias hom kev nyab xeeb?

Txoj Kev Woes of Dependency Management

Go muaj qhov kev vam khom tsim nyob rau sab saum toj ntawm cov chaw muab kev pabcuam nrov VCS. Cov cuab yeej uas tuaj nrog Go paub txog cov kev pabcuam no thiab tuaj yeem rub tawm, tsim, thiab nruab cov lej los ntawm lawv hauv ib qho poob qis. Thaum qhov no yog qhov zoo, muaj qhov tsis txaus ntseeg loj nrog versioning! Yog lawm, nws yog qhov tseeb tias koj tuaj yeem tau txais qhov chaws los ntawm cov kev pabcuam xws li github lossis bitbucket siv Go cov cuab yeej, tab sis koj tsis tuaj yeem hais qhia cov version. Thiab dua simplicity ntawm tus nqi ntawm kev pab. Kuv tsis muaj peev xwm nkag siab txog qhov kev txiav txim siab zoo li no.

Tom qab nug cov lus nug txog kev daws teeb meem rau qhov teeb meem no, pab pawg txhim kho Go tsim forum xov, uas tau piav qhia yuav ua li cas lawv yuav mus txog qhov teeb meem no. Lawv cov lus pom zoo yog kom luam tag nrho cov chaw khaws cia rau hauv koj qhov project ib hnub thiab tso nws "raws li yog." Lawv xav li cas? Peb muaj amazing version tswj systems nrog zoo tagging thiab version txhawb uas tus Go creators tsis quav ntsej thiab tsuas yog luam theej qhov chaws.

Cov hnab nqa taug kev los ntawm Xi

Hauv kuv lub tswv yim, Go yog tsim los ntawm cov neeg uas tau siv C tag nrho lawv lub neej thiab los ntawm cov neeg uas tsis xav sim tej yam tshiab. Cov lus tuaj yeem piav raws li C nrog lub log ntxiv (orig.: kev cob qhia log). Tsis muaj cov tswv yim tshiab hauv nws, tsuas yog kev txhawb nqa rau kev sib luag (uas, los ntawm txoj kev, yog qhov zoo) thiab qhov no yog kev txaj muag. Koj muaj kev sib luag zoo heev hauv kev siv tsis tau, lus ceg tawv.

Lwm qhov teeb meem creaking yog Go yog cov lus txheej txheem (xws li kev ntshai ntshai ntawm C). Koj xaus sau cov cai hauv cov txheej txheem txheej txheem uas xav tias archaic thiab outdated. Kuv paub cov khoom taw qhia kev ua haujlwm tsis yog cov mos txwv nyiaj, tab sis nws yuav zoo heev kom muaj peev xwm paub meej cov ntsiab lus rau hauv hom thiab muab encapsulation.

Simplicity rau koj tus kheej cov txiaj ntsig

Go tau tsim los ua kom yooj yim thiab nws ua tiav ntawm lub hom phiaj ntawd. Nws tau sau rau cov programmer uas tsis muaj zog, siv cov lus qub ua tus qauv. Nws los ua tiav nrog cov cuab yeej yooj yim los ua tej yam yooj yim. Nws yog ib qho yooj yim nyeem thiab siv tau yooj yim.

Nws yog ib qho lus tsis txaus ntseeg, tsis txaus ntseeg, thiab tsis zoo rau cov programmers ntse.

Бпасибо mersinvald ua rau kev kho

Tau qhov twg los: www.hab.com

Ntxiv ib saib