De programmeertaal Go is enorm geëvolueerd sinds het voor het eerst werd gepubliceerd in 2009. Go 1.18 was een langverwachte release vanwege de ondersteuning voor generieke geneesmiddelen en vele andere belangrijke updates.

Go heeft in maart 2022 versie 1.18 uitgebracht. Hier volgt een overzicht van de belangrijkste wijzigingen.

Ondersteuning voor Generieken

Met generieke programmering kunt u functies schrijven die flexibelere typen kunnen accepteren en retourneren.

Voordat u generieke geneesmiddelen ging ondersteunen, moest u parametertypen en retourtypen expliciet vermelden. Met de eenvoudigste vorm van generieke geneesmiddelen kunt u ongetypeerde parameters specificeren:

funcAlles afdrukken[T elke](dingT) {
fmt.Println(ding)
}

Maar generieke geneesmiddelen bieden veel meer kracht dan alleen dit. U kunt bijna elke combinatie en granulariteit van het type voor parameters declareren. U kunt bijvoorbeeld de beperkingen package om een ​​functie te schrijven die werkt op elke waarde die u kunt bestellen. Dit omvat int, floats en strings. Hier is een voorbeeld dat de syntaxis demonstreert:

importeren "golang.org/x/exp/constraints"

funcMax[T-beperkingen. besteld](invoer[]T) (maxT) {
voor _, v := bereikinvoer {
als v > maximaal {
max = v
}
}

opbrengst max
}

Merk op dat deze functie het generieke type gebruikt, beperkingen. Besteld, om de parameter en het retourtype te declareren.

Generieken zorgen voor onzekerheid en flexibiliteit in code. Het Generics-voorstel en de wijzigingen zijn achterwaarts compatibel.

Fuzz-testen

Fuzzen is een software testtechniek: dat een programma valideert met foutieve, onverwachte of onvoorspelbare gegevens.

De testen package introduceert fuzzing in 1.18, dus om een ​​fuzz te definiëren, moet je deze importeren uit de standaardbibliotheek:

importeren "testen"

Na het importeren van de testen pakket, kunt u een identificatie van het type doorgeven * testen. F naar de testfunctie.

functestFunc(f * testen. F) {
// jouw code
}

Fuzzing genereert invoerparameters voor het testen van code. Het resultaat van fuzzen is onvoorspelbaar omdat de invoer niet door de gebruiker is gedefinieerd. Fuzzing zou je moeten helpen betere codetests te schrijven en bugs op te sporen waarvan je niet wist dat ze bestonden.

Go Workspace-ondersteuning

Werkruimten zijn mappen met vergelijkbare broncode die samen een project of een grotere eenheid vormen. Werkruimten maken het eenvoudiger om code te beheren en fouten op te sporen door vergelijkbare code te groeperen op basis van functionaliteit.

Conventioneel verdeel je Go-projecten in broncode (src) en uitvoerbare bestanden (bin). De Go-toolchain bouwt de broncode van de eerste op in uitvoerbare bestanden in de laatste. Met Go-werkruimten kunnen ontwikkelaars met meerdere werkruimten werken met behulp van Go-modules met een bepaalde hoofdmodule.

De opdracht voor het maken van werkruimten is:

$ ga werken <opdracht>

Gebruik de het werk commando met subcommando's zoals:

  • in het → maakt een werkruimte aan in de opgegeven map.
  • gebruik → voegt een nieuwe module toe aan go.work, het go-werkruimtebestand.
  • Bewerk → bewerkt het go-werkruimtebestand.
  • synchroniseren → synchroniseert afhankelijkheden van de buildlijst naar de werkruimtemodules.

Het opnemen van workspaces to go zou de productiviteit verhogen zoals gepland bij het ontwikkelen van de taal.

Prestatieverbeteringen

Gaan versie 1.18 ondersteunt nu ARM64 Apple M1 en 64-bit PowerPC in de ABI-aanroepconventie. Dit resulteert in meer dan 10% winst in CPU-prestaties voor gebruikers van deze apparaten.

Gedeclareerde en ongebruikte variabelen in functies worden nu geregistreerd als fouten bij het compileren van programma's.

De ga bouwen commando, samen met andere gerelateerde commando's, ondersteunt de -asan flag, die interoperabiliteit met C/C++ ondersteunt. Dit zal Go-ontwikkelaars helpen Go-programma's te gebruiken met C- en C++-programma's.

Andere belangrijke updates

De ga halen commando installeert geen pakketten meer in modulebewuste modus, wat een grote verandering is sinds je eerst aan de slag met Go. De ga installeren commando vervangt krijgen om module-afhankelijkheden over werkruimten aan te passen.

Aangezien de typechecker nu generieke geneesmiddelen verwerkt, kunnen foutmeldingen anders loggen dan in eerdere versies.

De tijd die nodig is voor het compileren van programma's kan langzamer zijn in 1.18. Maar dit heeft geen invloed op de uitvoeringstijd als Go je programma eenmaal heeft gecompileerd.

U vindt de volledige details van de laatste wijzigingen in de release-opmerkingen voor Ga 1.18.

Go 1.18 heeft verschillende toevoegingen

Met Go 1.18 kun je nu generieke code schrijven, efficiënt testen met fuzzing en schakelen tussen Go-modules met behulp van werkruimten. U kunt zelfs code schrijven die werkt in combinatie met C- en C++-programma's.

Is Golang de moeite waard om vandaag te leren?

Lees volgende

DelenTweetenDelenE-mail

Gerelateerde onderwerpen

  • Programmeren
  • Programmeren
  • Programmeertalen

Over de auteur

MUO-staf

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren