Kwiinyanga ezidlulileyo bendisebenzisa iGo ukuphumeza.
Yenzelwe abadwelisi benkqubo ababuthathaka?
Ukuhamba kulula kakhulu ukuyifunda, kulula kangangokuba intshayelelo yandithatha ngolunye urhatya, emva koko ndikwazile ukwenza ikhowudi ngokunemveliso. Incwadi endandidla ngokuyifunda ethi Go
UGoogle uthi ukulula kweGo yindawo yakhe yokuthengisa kwaye ulwimi lwenzelwe imveliso ephezulu kumaqela amakhulu, kodwa ndiyathandabuza. Kukho iimpawu ezilahlekileyo okanye ezichazwe ngokugqithisileyo. Kwaye konke ngenxa yokungathembeki kubaphuhlisi, kunye nokucinga ukuba abakwazi ukwenza nantoni na ngokufanelekileyo. Lo mnqweno wokulula wawusisigqibo esinengqiqo ngabaqulunqi bolwimi, kwaye ukuze siqonde ngokupheleleyo ukuba kutheni bekufuneka, kufuneka siqonde inkuthazo yabaphuhlisi kunye noko bebezama ukufezekisa kwi-Go.
Ngoko kutheni yenziwe yalula kangaka? Nazi izicatshulwa ezimbalwa
Inqaku eliphambili apha kukuba abadwelisi bethu (malunga.:
abasebenzisi bakaGoogle ) asingabo abaphandi. Bona, njengomthetho, bancinci kakhulu, beza kuthi emva kokufunda, mhlawumbi bafunda iJava, okanye iC / C ++, okanye iPython. Abakwazi ukuqonda ulwimi olukhulu, kodwa kwangaxeshanye sifuna ukuba benze isoftware elungileyo. Yiyo loo nto ulwimi lwabo kufuneka lube lula kubo ukuluqonda nokufunda.
Ufanele ukuba uqhelene, athethe ngokufana noC. Abadwelisi benkqubo abasebenza kuGoogle baqala imisebenzi yabo kwangoko kwaye baqhelene kakhulu neelwimi zenkqubo, ngakumbi usapho lwakwaC. Imfuno yemveliso ekhawulezileyo kulwimi olutsha lokuprograma ithetha ukuba ulwimi akufuneki lube lukhulu kakhulu.
Intoni? Ke uRob Pike ngokusisiseko uthi abaphuhlisi kuGoogle abalunganga kangako, yiyo loo nto bedale ulwimi lwezidenge (malunga.: dumbe down) ukuze bakwazi ukwenza into. Luhlobo luni lokuzigwagwisa kumaqabane akho? Bendihlala ndikholelwa ukuba abaphuhlisi bakaGoogle bakhethwe ngesandla kwezona ziqaqambileyo nezibalaseleyo eMhlabeni. Ngokuqinisekileyo banokusingatha into enzima ngakumbi?
Izinto ezenziwe ngobulula obugqithisileyo
Ukulula kuyinjongo efanelekileyo kuyo nayiphi na idizayini, kwaye ukuzama ukwenza into elula kunzima. Nangona kunjalo, xa uzama ukusombulula (okanye ukuveza) iingxaki ezinzima, ngamanye amaxesha isixhobo esinzima siyafuneka. Ukuntsokotha kunye nokuntsonkotha ayizizo ezona mpawu zibalaseleyo zolwimi lwenkqubo, kodwa kukho indawo ephakathi apho ulwimi lunokudala ama-abstracts amahle ekulula ukuyiqonda nokusetyenziswa.
Ayibonakali kakhulu
Ngenxa yokuzinikela kwayo kubulula, iGo ayinazo izakhiwo ezibonwa njengendalo kwezinye iilwimi. Oku kunokubonakala ngathi licebo elilungileyo ekuqaleni, kodwa ekusebenzeni kukhokelela kwikhowudi ye-verbose. Isizathu soku kufuneka sicace - kufuneka kube lula kubaphuhlisi ukuba bafunde ikhowudi yabanye abantu, kodwa eneneni ezi zilula zonakalise ukufundeka. Akukho zishunqulelo kuGo: nokuba kuninzi okanye akukho nto.
Umzekelo, into eluncedo yeconsole efunda i-stdin okanye ifayile esuka kwiingxoxo zomgca womyalelo inokujongeka ngolu hlobo:
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)
}
Nangona le khowudi iphinda izame ukuba ngokubanzi ngokusemandleni, i-verbosity enyanzelwayo ye-Go ingena endleleni, kwaye ngenxa yoko, ukusombulula ingxaki elula kubangela inani elikhulu lekhowudi.
Apha, umzekelo, sisisombululo kwingxaki efanayo kwi
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);
}
}
Kwaye ngubani ofundeka ngakumbi ngoku? Ndiza kuvotela uD. Ikhowudi yakhe ifundeka ngakumbi njengoko echaza izenzo ngokucacileyo ngakumbi. D usebenzisa iikhonsepthi ezinzima kakhulu (malunga.:
Isihogo sokukopa
Ingcebiso edumileyo yokuphucula i-Go yinto eqhelekileyo. Oku kuya kunceda ubuncinane ukuphepha ukukopa okungafunekiyo kwekhowudi ukuxhasa zonke iintlobo zedatha. Umzekelo, umsebenzi wokushwankathela uluhlu lwamanani apheleleyo unokuphunyezwa nangayiphi na enye indlela ngaphandle kokukopa-uncamathisele umsebenzi wawo osisiseko kudidi ngalunye olupheleleyo, ayikho enye indlela:
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))
}
Kwaye lo mzekelo awusebenzi nakwiintlobo ezisayiniweyo. Le ndlela iwaphula ngokupheleleyo umgaqo wokungaziphindi (
Umzekelo ofanayo ku-D:
import std.stdio;
import std.algorithm;
void main(string[] args)
{
[1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}
Ilula, intle kwaye ithe ngqo kwinqanaba. Umsebenzi osetyenziswe apha ngu reduce
kuhlobo lwetemplate kunye nesivisa. Ewe, oku kwakhona kuntsonkothile ngakumbi kunenguqulelo yeGo, kodwa akunzima kangako kubadwelisi benkqubo abakrelekrele ukuba bayiqonde. Nguwuphi umzekelo ekulula ukuwugcina kwaye kulula ukuwufunda?
Indlela yokudlula elula yohlobo
Ndicinga ukuba abadwelisi benkqubo be-Go befunda le nto baya kuba namagwebu emlonyeni kwaye bakhale, "Uyenza kakubi!" Ewe, kukho enye indlela yokwenza umsebenzi wegeneric kunye neentlobo, kodwa iyaphula ngokupheleleyo inkqubo yohlobo!
Jonga kulo mzekelo wokulungisa ulwimi obudenge ukulungisa ingxaki:
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)
}
Oku kuphunyezwa Reduce
ibibolekiwe kwinqaku interface{}
- ifarce, kwaye ngolwimi ifuneka kuphela ukudlula ukuchwetheza. Olu lujongano olungenanto kwaye zonke iintlobo ziyalusebenzisa, luvumela inkululeko epheleleyo kuye wonke umntu. Le ndlela yokucwangcisa imbi kakhulu, kwaye akuphelelanga apho. Imigibe yeAcrobatic efana nale ifuna ukusetyenziswa komboniso wexesha lokubaleka. Nditsho noRob Pike akabathandi abantu abasebenzisa kakubi oku, njengoko watshoyo kwenye yeengxelo zakhe.
Esi sisixhobo esinamandla ekufuneka sisetyenziswe ngononophelo. Ifanele iphetshwe ngaphandle kokuba kuyimfuneko ngokungqongqo.
Ndingathatha itemplates zikaD endaweni yale mbudane. Angatsho njani umntu lonto interface{}
efundeka ngakumbi okanye nkqu nokuchwetheza ukhuseleko?
Ooyeha boLawulo lokuXhomekeka
I-Go inenkqubo yokuxhomekeka eyakhelwe-ngaphakathi eyakhelwe phezulu kubanikezeli abaziwayo bokubamba
Emva kokubuza imibuzo malunga nesisombululo kule ngxaki, iqela lophuhliso lwe-Go lenze
Imithwalo yenkcubeko evela eXi
Ngokoluvo lwam, iGo yaphuhliswa ngabantu ababesebenzisa uC ubomi babo bonke nangabo babengafuni ukuzama into entsha. Ulwimi lunokuchazwa njengo C ngamavili angaphezulu (imvelaphi.:
Enye ingxaki ye-creaking kukuba i-Go lulwimi lwenkqubo (njengokoyikeka okuthe cwaka kwe-C). Ugqiba ukubhala ikhowudi kwisitayile senkqubo esiziva si-archaic kwaye siphelelwe lixesha. Ndiyazi ukuba inkqubo ejoliswe kwinto ayiyombumbulu yesilivere, kodwa kuya kuba kuhle ukukwazi ukukhupha iinkcukacha kwiintlobo kunye nokubonelela nge-encapsulation.
Ubulula ukwenzela inzuzo yakho
I-Go yenzelwe ukuba ibe lula kwaye iyaphumelela kuloo njongo. Yabhalelwa abaprogram ababuthathaka, besebenzisa ulwimi oludala njenge template. Iza iphelele kunye nezixhobo ezilula zokwenza izinto ezilula. Kulula ukufunda kwaye kulula ukuyisebenzisa.
Ithetha kakhulu, ayichukumisi, kwaye imbi kubadwelisi benkqubo abakrelekrele.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
umthombo: www.habr.com