He aha te mea he kino te Haere Hoahoa mo nga Kaihanga Papatono
I roto i nga marama kua hipa kua whakamahi ahau i a Go mo nga whakatinanatanga. Tuhinga o mua (āhua.: waehere hei whakamatautau i te mahi o tetahi whakaaro) i roto i tona wa waatea, ko tetahi waahanga ki te ako i te reo hotaka. He tino ngawari nga kaupapa, ehara i te kaupapa o tenei tuhinga, engari ko te wheako ki te whakamahi i a Go ake e tika ana etahi kupu mo tena. Haere ki te oati (āhua.: tuhinga i tuhia i te tau 2015) he reo rongonui mo te waehere tino tauineine. Na Google te reo i hanga, i reira e kaha ana te whakamahi. Ko te rarangi o raro, he pono taku whakaaro he kino te hoahoa o te reo Haere mo nga kaitakataka atamai.
I hangaia mo nga kaitakataka ngoikore?
He tino ngawari ki te ako a Haere, na te mea i tae mai te kupu whakataki i tetahi ahiahi, i muri i tera ka taea e au te tohu whai hua. Ko te pukapuka i akohia e au ko Haere ko te ingoa He Kupu Whakataki ki te Papatonotanga i roto i te Haere (whakamaori), e wātea ana i runga ipurangi. Ko te pukapuka, penei i te Go source code ake, he ngawari ki te panui, he pai nga tauira waehere, he 150 pea nga wharangi ka taea te panui i te waa kotahi. He mea hou tenei ngawari i te tuatahi, ina koa i roto i te ao hotaka kua ki tonu i nga hangarau uaua rawa atu. Engari i te mutunga, ka puta ake te whakaaro: "Koinei ranei?"
E kii ana a Google ko te ngawari o Go ko tana tohu hoko me te reo i hangaia mo te tino hua i roto i nga roopu nui, engari kei te ruarua ahau. He ahuatanga kei te ngaro, kei te tino taipitopito ranei. A ko nga mea katoa na te kore o te whakawhirinaki ki nga kaihanga, me te whakaaro kaore e taea e ratou te mahi tika. Ko tenei hiahia mo te ngawari he whakatau mohio na nga kaihanga o te reo, a kia tino marama ai he aha i hiahiatia ai, me mohio tatou ki te hihiri o nga kaiwhakawhanake me nga mea e ngana ana ki te whakatutuki i roto i a Go.
Na he aha te take i tino ngawari ai? Anei etahi o nga korero e rua Rob Pike (āhua.: tetahi o nga kaihanga tahi o te reo Go):
Ko te mea nui i konei ko o tatou kaihōtaka (āhua.: Googlers) ehara i te hunga rangahau. He tamariki tonu ratou, ka tae mai ki a matou i muri i te ako, tera pea i ako ratou i te Java, i te C/C++ ranei, i te Python ranei. Kaore e taea e ratou te mohio ki tetahi reo nui, engari i te wa ano e hiahia ana matou ki te hanga rorohiko pai. No reira kia ngawari to ratou reo ki te mohio me te ako.
Me mohio ia, he rite tonu te korero ki a C. Ko nga kaihōtaka e mahi ana i Google ka timata i a ratou mahi moata, me te mohio ki nga reo tikanga, ina koa ko te whanau C. Ko te hiahia kia tere te hua i roto i te reo hootaka hou ko te tikanga kia kaua te reo e tino pukuriri.
He aha? Na ko te korero a Rob Pike ko nga kaiwhakawhanake i Google kaore i te tino pai, na reira i hanga he reo mo te hunga porangi (āhua.: wahangu) kia taea e ratou te mahi. He aha te ahua whakahihi ki o hoa mahi? I whakapono tonu ahau ko nga kaiwhakawhanake a Google kua tohua mai i nga mea tino maamaa me te pai rawa atu o te Ao. He pono ka taea e ratou te hapai i tetahi mea uaua ake?
Taonga o te tino ngawari
Ko te ngawari he kaupapa tika i roto i tetahi hoahoa, a he uaua te ngana ki te hanga i tetahi mea ngawari. Engari, i te wa e ngana ana ki te whakaoti (me te whakaatu ranei) nga raru uaua, i etahi wa ka hiahiatia he taputapu uaua. Ehara i te mea tino uaua me te uaua nga ahuatanga pai o te reo hootaka, engari he waahi waenga ka taea e te reo te hanga tangohanga huatau he maamaa te maarama me te whakamahi.
Ehara i te tino whakapuaki
Na tona kaha ki te ngawari, karekau a Go i nga hanganga e kiia ana he mea maori i etahi atu reo. He ahua pai pea tenei i te tuatahi, engari i roto i nga mahi ka puta he waehere kupu. Ko te take o tenei me maarama - me ngawari ma nga kaiwhakawhanake ki te panui i nga waehere a etahi atu, engari ko enei whakangawari ka kino noa iho te panui. Karekau he whakapototanga i roto i te Haere: he nui, he kore noa ranei.
Hei tauira, ka penei te ahua o te taputapu papatohu e panui ana i te stdin, i tetahi konae ranei mai i nga tautohetohe raina whakahau:
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)
}
Ahakoa ka ngana ano tenei waehere ki te whanui ka taea, ka raru te kupu kaha a Go, na reira, ko te whakaoti rapanga ngawari ka hua te nui o te waehere.
Anei, hei tauira, he otinga ki te raru ano kei roto D:
A ko wai te mea ka taea te panui inaianei? Ka hoatu e ahau taku pooti ki a D. He pai ake te panui o tana waehere na te mea he marama ake tana korero mo nga mahi. Ka whakamahia e D nga ariā uaua ake (āhua.: karanga mahi kē и tauira) i roto i te tauira Haere, engari karekau he mea uaua ki te mohio ki a raatau.
Te reinga o te kape
He whakaaro rongonui mo te whakapai ake i a Go ko te whanui. Ka awhina tenei ki te karo i te kape koretake o te waehere hei tautoko i nga momo raraunga katoa. Hei tauira, ka taea te whakatinana i tetahi mahi hei whakarapopoto i te rarangi tauoti ma te kape-whakapiri i tana mahi taketake mo ia momo tauoti; kaore he huarahi ke atu:
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))
}
A kaore tenei tauira e mahi mo nga momo kua hainatia. Ko tenei huarahi ka tino takahi i te kaupapa kia kaua e whakahoki ano i a koe ano (maroke), tetahi o nga maataapono tino rongonui me te maarama, me te kore e aro ko wai te putake o nga hapa maha. He aha a Go i mahi ai i tenei? He ahua kino tenei o te reo.
He tauira ano mo D:
import std.stdio;
import std.algorithm;
void main(string[] args)
{
[1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}
He ngawari, he huatau me te tika ki te kaupapa. Ko te mahi e whakamahia ana i konei ko reduce mo te momo tauira me te whakatauira. Ae, he uaua ake ano tenei i te putanga Haere, engari ehara i te mea uaua ki nga kaiwhakatakoto kaupapa mohio. Ko tehea tauira he ngawari ake te pupuri me te ngawari ki te panui?
Momo ngawari te karo i te punaha
Ki taku whakaaro ko nga kaihōtaka a Go ka panui i tenei ka pahuka i te waha me te karanga, "Kei te he koe!" Ana, he huarahi ano hei hanga i tetahi mahi me nga momo momo, engari ka tino pakaru te punaha momo!
Tirohia tenei tauira o te whakatika reo poauau hei whakatika i te raru:
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)
}
Tenei whakatinanatanga Reduce i nama mai i te tuhinga Ko nga momo reo idiomatic i Go (āhua.: Kaore i kitea e au te whakamaoritanga, ka koa ahau ki te awhina koe ki tenei). Ana, ki te mea he kupu korero, e kino ana ahau ki te kite i tetahi tauira kore korero. Whakamahinga interface{} - he whakaipoipo, a i roto i te reo e tika ana kia karohia te patopato. He atanga kau tenei, ka whakatinanahia e nga momo katoa, ka taea e te katoa te herekore. He tino kino tenei ahua o te hotaka, a ehara ko tera anake. Ko nga mahi acrobatic penei me whakamahi te whakaata i te waa whakahaere. Ahakoa karekau a Rob Pike e pai ki nga tangata e tukino ana i tenei, i kii ia i tetahi o ana purongo.
He taputapu kaha tenei me whakamahi ma te tupato. Me karohia ki te kore e tino tika.
Ka tangohia e ahau nga tauira D hei utu mo tenei poauau. Me pehea e korero ai tetahi interface{} he pai ake te panui, he momo haumaru ranei?
Nga Aue o te Whakahaere Tiakitanga
Kei a Go tetahi punaha whakawhirinaki kua hangaia ki runga ake o nga kaiwhakarato manaaki rongonui VCS. Ko nga taputapu ka haere mai me Go e mohio ana mo enei ratonga ka taea te tango, te hanga, me te whakauru waehere mai i a raatau i te wa kotahi. Ahakoa he pai tenei, he hapa nui kei te whakaputanga! Ae, he pono ka taea e koe te tiki i te waehere puna mai i nga ratonga penei i te github me te bitbucket ma te whakamahi i nga taputapu Haere, engari kaore e taea e koe te whakaatu i te putanga. Na ano te ngawari i te utu o te whaihua. Kaore au e kaha ki te mohio ki nga tikanga o taua whakatau.
Whai muri i nga patai mo te otinga mo tenei raru, i hanga e te roopu whanaketanga Go miro huinga, i whakaraupapahia me pehea e taea ai e ratou tenei take. Ko ta ratou kupu tohutohu ko te kape noa i te katoa o te putunga ki roto i to kaupapa i tetahi ra ka waiho "penei." He aha ta ratou whakaaro? Kei a matou nga punaha whakahaere putanga whakamiharo me te tohu tohu me te tautoko putanga e kore e warewarehia e nga kaihanga Go me te kape noa i te waehere puna.
Ko nga putea ahurea mai i a Xi
Ki taku whakaaro, i whakawhanakehia a Go e nga tangata i whakamahi C i o ratau oranga katoa me te hunga kaore i pirangi ki te whakamatau i tetahi mea hou. Ka taea te korero ko te reo C me etahi atu wira(orig.: wira whakangungu). Karekau he whakaaro hou i roto, engari mo te tautoko mo te whakarara (he mea whakamiharo, he mea whakamiharo) he mea whakama tenei. He tino pai to whakarara i roto i te reo kopa.
Ko tetahi atu raruraru ko te Go he reo tikanga (penei i te whakamataku wahangu o C). Ka mutu koe ki te tuhi i te waehere i roto i te ahua tikanga e ahua tawhito me te tawhito. E mohio ana ahau ehara i te mea he matā hiriwa, engari he pai ki te tango i nga korero ki roto i nga momo me te whakarato whakaahuru.
Te ngawari mo to painga ake
I hoahoatia a Go kia ngawari, ka angitu ki taua whainga. I tuhia mo nga kaitakataka ngoikore, he reo tawhito hei tauira. Ka tae mai me nga taputapu ngawari ki te mahi i nga mea ngawari. He ngawari ki te panui me te ngawari ki te whakamahi.
He tino korero, he kore tino pai, he kino hoki mo nga kaiwhakatakoto kaupapa mohio.