Mumwedzi yapfuura ndanga ndichishandisa Go kuti ndiite.
Yakagadzirirwa vasina simba programmers?
Enda iri nyore kwazvo kudzidza, zviri nyore zvekuti sumo yakanditora mamwe manheru, mushure mezvo ndaigona kutonyora zvinobudirira. Bhuku randaigara ndichidzidza rinonzi Go
Google inoti Go kupusa inzvimbo yayo yekutengesa uye mutauro wakagadzirirwa kuti ubudirire muzvikwata zvikuru, asi ini ndinopokana nazvo. Pane zvimiro zvinenge zvisipo kana kuti zvakanyanyowandisa. Uye zvose nekuda kwekushaya kuvimba nevagadziri, nekufungidzira kuti havakwanisi kuita chero chinhu chakanaka. Ichi chishuvo chekureruka yaive sarudzo yekuziva nevagadziri vemutauro, uye kuti tinzwisise zvizere kuti nei ichidikanwa, isu tinofanirwa kunzwisisa kurudziro yevagadziri uye zvavaiyedza kuita muGo.
Saka nei yakaitwa nyore? Heano mashoma ekotesheni
Chinhu chakakosha apa ndechekuti vagadziri vedu (approx.:
Vashandi veGoogle ) havasi vaongorori. Ivo, sekutonga, vadiki kwazvo, vanouya kwatiri mushure mekudzidza, pamwe vakadzidza Java, kana C / C ++, kana Python. Havagoni kunzwisisa mutauro mukuru, asi panguva imwe chete tinoda kuti vagadzire software yakanaka. Ndicho chikonzero nei mutauro wavo uchifanira kuva nyore kwavari kunzwisisa nokudzidza.
Anofanira kunge akajairana, achingotaura zvakafanana naC. Vagadziri vezvirongwa vanoshanda kuGoogle vanotanga mabasa avo nekukurumidza uye vanonyanya kujairana nemitauro yemaitiro, kunyanya mhuri yeC. Chinodiwa chekukurumidza kugadzira mumutauro mutsva wechirongwa zvinoreva kuti mutauro haufanirwe kuve wakanyanya.
Chii? Saka Rob Pike ari kutaura kuti vanogadzira paGoogle havana kunaka, ndosaka vakagadzira mutauro wemapenzi (approx.: dumbed down) kuti vakwanise kuita chimwe chinhu. Ndeupi rudzi rwekuzvikudza kune vaunoshanda navo? Ndagara ndichitenda kuti vanogadzira Google vanosarudzwa kubva kune anopenya uye akanakisa paPasi. Chokwadi vanogona kubata chimwe chinhu chakaoma?
Zvigadzirwa zvekupfava zvakanyanya
Kuve nyore chinangwa chakakodzera mune chero dhizaini, uye kuedza kuita chinhu chiri nyore kwakaoma. Zvisinei, pakuedza kugadzirisa (kana kunyange kutaura) matambudziko akaoma, dzimwe nguva chimbo chakaoma chinodiwa. Kuomarara uye kuomesesa hazvisi izvo zvakanakisa zvemutauro wechirongwa, asi pane nzvimbo yepakati umo mutauro unogona kugadzira zvinoyevedza zvipfupi zviri nyore kunzwisisa nekushandisa.
Kwete kutaura zvakanyanya
Nekuda kwekuzvipira kwayo mukureruka, Go inoshaya zvivakwa zvinoonekwa sezvakasikwa mune mimwe mitauro. Izvi zvingaita sepfungwa yakanaka pakutanga, asi mukuita zvinoguma nekodhi yezwi. Chikonzero cheizvi chinofanira kuve pachena - zvinofanirwa kuve nyore kune vanogadzira kuti vaverenge kodhi yevamwe vanhu, asi kutaura zvazviri izvi zviri nyore zvinongokuvadza kuverenga. Iko hakuna zvipfupiso muGo: ingave yakawanda kana hapana.
Semuenzaniso, console utility iyo inoverenga stdin kana faira kubva kune yekuraira mutsara nharo inotaridzika seizvi:
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)
}
Kunyangwe iyi kodhi zvakare ichiedza kuve yakajairwa sezvinobvira, Go's yekumanikidza verbosity inopinda munzira, uye semhedzisiro, kugadzirisa dambudziko riri nyore kunoguma nehuwandu hukuru hwekodhi.
Heino, semuenzaniso, mhinduro kudambudziko rimwechete mukati
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);
}
}
Uye ndiani anoverengeka zvino? Ndichapa vhoti yangu kuna D. Kodhi yake inoverengeka zvakanyanya nekuti anotsanangura zviito zvakajeka. D inoshandisa pfungwa dzakaoma kunzwisisa (approx.:
Gehena rekukopa
Kurudziro yakakurumbira yekuvandudza Go ndeye generality. Izvi zvichabatsira kudzivirira kukopa kusingakodzeri kwekodhi kutsigira ese marudzi e data. Semuyenzaniso, basa rekupfupisa runyoro rwemanhamba rinogona kuitwa pasina imwe nzira kunze kwekukopa-namisa basa rayo rekutanga pamhando yega yega yega; hapana imwe nzira:
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))
}
Uye muenzaniso uyu hautomboshandi kune akasaina mhando. Iyi nzira inotyora zvachose musimboti wekusazvidzokorora (
Muenzaniso wakafanana paD:
import std.stdio;
import std.algorithm;
void main(string[] args)
{
[1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}
Nyore, inoyevedza uye yakananga kune iyo poindi. Basa rinoshandiswa pano nderokuti reduce
yemhando yetemplate uye predicate. Ehe, izvi zvakare zvakanyanya kuomarara kupfuura iyo Go vhezheni, asi hazvina kuomera kuti vakangwara programmer vanzwisise. Muenzaniso upi uri nyore kuchengeta uye uri nyore kuverenga?
Nyore mhando system bypass
Ini ndinofungidzira Go vagadziri vezvirongwa vachiverenga izvi vanenge vachipupuma furo pamuromo uye vachipopota, "Uri kuzviita zvisizvo!" Zvakanaka, pane imwe nzira yekugadzira generic basa uye mhando, asi inotyora zvachose mhando system!
Tarisa uone uyu muenzaniso weupenzi kugadzirisa mutauro kugadzirisa dambudziko:
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)
}
Kuitwa uku Reduce
yakakweretwa kubva pachinyorwa interface{}
- farce, uye mumutauro inodiwa chete kunzvenga kutaipa. Iyi inzvimbo isina chinhu uye marudzi ese anoishandisa, ichibvumira rusununguko rwakakwana kune wese munhu. Iyi nzira yekuronga yakashata zvakanyanya, uye handizvo zvese. Acrobatic feats seizvi inoda kushandiswa kwekumhanya-mhanya kuratidza. Kunyangwe Rob Pike haadi vanhu vanoshungurudza izvi, sezvaakataura mune imwe yemishumo yake.
Ichi chishandiso chine simba chinofanira kushandiswa nekuchenjerera. Inofanira kudziviswa kunze kwekunge ichinyatsodikanwa.
Ini ndaizotora maD matemplate pane izvi zvisina maturo. Munhu angadaro sei interface{}
inoverengeka kana kutotaipa safe?
Nhamo dzeDependency Management
Go ine yakavakirwa-mukati yekutsamira sisitimu yakavakirwa pamusoro pevanozivikanwa vanopa vanopa
Mushure mekubvunza mibvunzo nezve mhinduro kudambudziko iri, timu yekuvandudza Go yakagadzira
Cultural baggage kubva Xi
Sekuona kwangu, Go rakagadzirwa nevanhu vanga vashandisa C hupenyu hwavo hwese uye neavo vaisada kuedza chimwe chinhu chitsva. Mutauro unogona kutsanangurwa seC uine mamwe mavhiri (orig.:
Rimwe dambudziko rinowedzera nderekuti Go mutauro wemaitiro (sekutyisa kwakanyarara kweC). Iwe unopedzisira wanyora kodhi mune yemaitiro maitiro anonzwa echinyakare uye echinyakare. Ndinoziva chirongwa chakanangana nechinhu hachisi bara resirivheri, asi zvingave zvakanaka kukwanisa kubvisa izvo mumhando uye kupa encapsulation.
Zviri nyore kuti iwe pachako ubatsirwe
Go rakagadzirirwa kuve nyore uye rinobudirira pane icho chinangwa. Yakanyorerwa vagadziri vasina simba, vachishandisa mutauro wekare setemplate. Inouya yakakwana nezvishandiso zviri nyore kuita zvinhu zviri nyore. Zviri nyore kuverenga uye nyore kushandisa.
Zvakanyanya verbose, hazvishamisi, uye zvakaipa kune vakangwara zvirongwa.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
Source: www.habr.com