Udgivelsen af programmeringssproget Go 1.16 præsenteres, som udvikles af Google med deltagelse af fællesskabet som en hybridløsning, der kombinerer den høje ydeevne af kompilerede sprog med sådanne fordele ved scriptsprog som let at skrive kode , udviklingshastighed og fejlbeskyttelse. Projektkoden distribueres under BSD-licensen.
Go's syntaks er baseret på velkendte elementer fra C-sproget med nogle lån fra Python-sproget. Sproget er ret kortfattet, men koden er let at læse og forstå. Go-koden er kompileret til selvstændige binære eksekverbare filer, der kører indbygget uden brug af en virtuel maskine (profilering, fejlfindingsmoduler og andre undersystemer til registrering af runtime-problem er integreret som runtime-komponenter), hvilket giver mulighed for ydeevne, der kan sammenlignes med C-programmer.
Projektet er oprindeligt udviklet med henblik på multi-threaded programmering og effektiv drift på multi-core systemer, herunder at give operatør-niveau midler til at organisere parallel computing og interaktion mellem parallel-eksekverede metoder. Sproget giver også indbygget beskyttelse mod overallokerede hukommelsesblokke og giver mulighed for at bruge en skraldeopsamler.
De vigtigste nye funktioner introduceret i Go 1.16 er:
- Embed-pakken er blevet tilføjet, og den indeholder værktøjer til at integrere vilkårlige filer og mapper i programmet. En ny direktiv "//go:embed" er tilføjet for at specificere filer, der skal integreres i kompileringsfasen. For eksempel vil angivelse af kommentaren "//go:embed test.txt" i koden og deklarering af variablen "var f embed.FS" efter den resultere i integration af filen test.txt og muligheden for at tilgå den via deskriptoren "f". På lignende måde kan du integrere filer, der er nødvendige for at arbejde med ressourcer eller individuelle værdier af en bestemt type, for eksempel for at hente strengvariablen "s" fra filen version.txt, kan du angive: import _ "embed" //go:embed version.txt var s string print(s)
- Det nye modulsystem med integreret versionsunderstøttelse er nu påkrævet som standard og erstatter de GOPATH-baserede afhængighedsstyringsværktøjer. Miljøvariablen GO111MODULE er nu som standard indstillet til "on", og modultilstanden bruges uanset om der er en go.mod-fil i arbejds- eller overordnet mappe. I den nye tilstand ændrer byggekommandoer som "go build" og "go test" ikke indholdet af go.mod og go.sum, og kommandoen "go install" behandler versionsspecifikke argumenter ("go install example.com/cmd@v1.0.0"). For at vende tilbage til den gamle funktionsmåde skal du ændre GO111MODULE til "auto". Det bemærkes, at 96 % af udviklerne allerede er skiftet til det nye modulsystem.
- Linkeren er blevet optimeret. For store projekter er linkning nu 20-25% hurtigere og kræver 5-15% mindre hukommelse.
- Compileren understøtter nu inline-funktionsudvidelse med forkortelser for løkker, metodeværdier og 'type switch'-konstruktioner.
- Tilføjet understøttelse af Apple-systemer udstyret med den nye Apple M1 ARM-chip. Tilføjet netbsd/arm64- og openbsd/mips64-porte med understøttelse af NetBSD på 64-bit ARM og OpenBSD på MIPS64-systemer. Tilføjet understøttelse af cgo og "-buildmode=pie"-tilstanden til linux/riscv64-porten.
- Understøttelse af x87-kompileringstilstand (GO386=387) er udgået. Understøttelse af processorer uden SSE2-instruktioner er nu tilgængelig via softwaretilstanden "GO386=softfloat".
Derudover kan vi bemærke starten på testningen af betaversionen af Dart 2.12-sproget, som har stabiliseret null-sikkerhedstilstanden, hvilket vil hjælpe med at undgå nedbrud forårsaget af forsøg på at bruge variabler, hvis værdi er udefineret og indstillet til Null. Tilstanden indebærer, at variabler ikke kan have udefinerede værdier, medmindre de eksplicit er tildelt null-værdien. Tilstanden tager strengt højde for typerne af variabler, hvilket giver compileren mulighed for at anvende yderligere optimeringer. Typecompliance kontrolleres ved kompilering. Hvis du f.eks. forsøger at tildele værdien Null til en variabel med en type, der ikke indefinerer en udefineret tilstand, såsom int, vil der blive kastet en fejl.
Kilde: opennet.ru
