programmeeri keele väljaanne , mis on arendatud Google'i koostöös kogukonnaga, on hübriidlahendus, mis ühendab kompileeritavate keelte kõrge jõudluse skriptikeelte eelistega, nagu koodi lihtsus, kiire arendamine ja vigade vältimise kaitse. Projekti kood BSD litsentsi alusel.
Go süntaks põhineb tuttavatel elementidel C-keeles, kuid sisaldab ka laenatud komponente Pythonist. Keel on piisavalt lakooniline, kuid samas on kood kergesti loetav ja arusaadav. Go kood kompileeritakse eraldiseisvateks binaarseteks täideviimistoodeteks, mis töötavad natiivselt ilma virtuaalmasina kasutamiseta (profiliseerimise, silumise ja teiste probleemide tuvastamise alamprogrammide moodulid integreeritakse ), mis võimaldab saavutada jõudlust, mis on võrreldav C-keeles kirjutatud programmidega.
Projekt on algselt välja töötatud silmas pidades mitme lõime programmeerimist ja tõhusat töötamist mitme tuumaga süsteemides, pakkudes sealhulgas operaatorite tasemel rakendatud tööriistu paralleelsete arvutuste korraldamiseks ja paralleelselt töötavate meetodite vaheliseks suhtlemiseks. Keel pakub ka sisseehitatud kaitsevahendeid lubamatute mäluplokkide ületamise vastu ja võimaldab kasutusele võtta prügikoristajat.
Peamised , esitatud Go 1.14 väljaandes:
- Uus moodulite süsteem käsus "go" on kuulutatud valmis laialdasemaks kasutamiseks, see on vaikimisi sisse lülitatud ja soovitatakse sõltuvuste haldamiseks GOPATH-i asemel. Uus moodulite süsteem sisaldab integreeritud versioonihalduse tuge, pakettide tarne vahendeid ja paremat sõltuvuste haldust. Moodulite abil ei pea arendajad enam olema seotud GOPATH puu struktuuriga, nad saavad selgelt määratleda sõltuvused versioonide arvestusega ja luua korduvkasutatavaid kogumikke.
- toetatakse liideste sisseviimist korduva meetodikomplektiga. Sisseviidud liidese meetoditel võivad nüüd olla samad nimed ja sarnased allkirjad nagu juba olemasolevate liideste meetoditel. Selgesõnaliselt deklareeritud meetodid jäävad nagu varem unikaalseks.
- On suurenenud "defer" lause jõudlus, mille kasutamine ei erine enam oluliselt otse kutsutud edasi lükatud funktsiooni kiirusest, mis võimaldab kasutada funktsiooni edasi lükkamist jõudlusse tundlikus koodis.
- Asünkroonne koondamise eemaldamine (goroutine) tagab, et tsüklid, mis ei sisalda funktsioonikõnesid, ei saa nüüd potentsiaalselt põhjustada ajakava vastastikust blokeerimist ega jäta prügikogumise algust viivitama.
- Mälu lehekeste jaotamise süsteemi tõhusus on paranenud, vähendades nüüd märkimisväärselt lukustuste konflikte suurte GOMAXPROCS väärtustega konfiguratsioonides. Tulemuseks on vähenenud viivitused ja suurenenud läbilaskevõime suures mahus paralleelse jaotamise korral.
- Lukustuste optimeerimine ja konteksti vahetuste arvu vähendamine ajastustaimede, nagu time.After, time.Tick ja net.Conn.SetDeadline, kasutamisel.
- Go meeskonnas on vaikimisi aktiveeritud lipp „-mod=vendor“, kui juurkaustas on olemas vendor kataloog, mis on mõeldud kindla tarnija väliste sõltuvuste tarnimiseks. Täiendav lipp „-mod=mod“ on lisatud moodulite laadimiseks moodulite vahemälust, mitte katalogist „vendor“. Kui fail go.mod on vaikimisi ainult lugemiseks, siis seatakse lipp „-mod=readonly“, kui ülemist vendor katalooge ei leidu. Lisatud lipp „-modfile=file“ alternatiivse go.mod faili määramiseks, mis asendab juurtaseme mooduli olemasolevat faili.
- Lisatud keskkonnamuutuja GOINSECURE, mille seadistamisel ei nõua käsk go HTTPS-i kasutamist ning alahindab sertifikaatide kontrolli moodulite otsese laadimise puhul.
- Kompilaatorisse on lisatud vaikimisi aktiveeritud lipp „-d=checkptr“, et kontrollida koodi vastavust unsafe.Pointeri ohutu kasutamise reeglitele.
- Uue paketi toimetamine mittekrüptograafiliste hash-funktsioonidega juhuslike baitjärjekordade või stringide hash-tabelite loomiseks.
- Linuxis on lisatud eksperimentaalne tugi 64-bitisele RISC-V platvormile.
- Lisatud tugi FreeBSD-le 64-bitistes ARM-süsteemides.
Allikas: opennet.ru
