Definition „Go (Programmiersprache)“

Was ist Go?

| Autor / Redakteur: chrissikraus / Stephan Augsten

Go wurde von Google-Mitarbeitern erdacht, der Go Gopher als Maskottchen geht auf Renee French zurück.
Go wurde von Google-Mitarbeitern erdacht, der Go Gopher als Maskottchen geht auf Renee French zurück. (Bild: fiveyears.jpg / Renee French / CC BY 3.0)

Die Programmiersprache Go wurde von Google-Mitarbeitern mit Fokus auf Systemprogrammierung entworfen. Moderne Ansätze wie Nebenläufigkeit und Garbage Collector führen dabei zu einer besonders guten Performance.

Go ist eine Open Source Programmiersprache mit statischer Typisierung, die ihre besonderen Stärken in Nebenläufigkeit und Parallelisierung, also der parallelen Abarbeitung mehrerer Befehle, ausspielen kann. Die Sprache wurde von Google-Mitarbeitern entwickelt; 2009 wurde die erste stabile Version veröffentlicht.

Ursprünglich für die Systemprogrammierung entworfen, sollte Go technischen Neuerungen und modernen Anforderungen gerecht werden, zum Beispiel Mehrkernprozessoren oder skalierbare Systeme im Cloud-Umfeld. Die Sprache will Komfort während der Entwicklung mit Effizienz beim Kompilieren und Ausführen des Codes vereinen – eine Kombination, die bei gängigen Systemprogrammiersprachen wie C und C++ in der Form nicht existiert.

An C orientiert

Go ähnelt in der Syntax stark der Programmiersprache C, führt aber einige Neuerungen ein. Sie sollen die Arbeit mit Go effizienter gestalten und den Code besser lesbar machen. Statements müssen zum Beispiel nicht mit einem Semikolon abgeschlossen werden und es gibt nur 25 reservierte Schlüsselwörter.

Klassen existieren in Go nicht. Über Interfaces und Strukturen können jedoch eigene Typen definiert werden, mit denen sich objektorientiert arbeiten lässt. Auch Polymorphie mit dynamischer Bindung ist möglich.

Es wurde besonders viel Wert darauf gelegt, das Kompilieren so effizient wie möglich zu gestalten – die langsame Übersetzungsgeschwindigkeit von C / C++ ist gerade bei großen Projekten ein häufiger Kritikpunkt. Zudem bietet Go einen Garbage Collector, also eine automatische Speicherbereinigung.

Nebenläufigkeit mit Go

Go unterstützt Nebenläufigkeit, kann also mehrere Prozesse parallel und voneinander unabhängig behandeln. Das geschieht mit sogenannten Goroutinen: Schreibt man das Schlüsselwort „go“ vor Funktions- oder Methodenaufrufe, werden diese zur Laufzeit parallel abgearbeitet. Goroutinen sind keine Threads, sondern Koroutinen.

In einem einzigen Thread können demzufolge viele Goroutinen ausgeführt werden; erst, wenn eine Goroutine ihren Thread blockiert, werden die übrigen Routinen in einen neuen Thread ausgelagert. Die Routinen sind sehr kompakt und belegen nur so viel Speicher, wie sie tatsächlich für die Abarbeitung ihrer jeweiligen Aufgaben benötigen.

Kommunikation zwischen Goroutinen

Go ermöglicht die Kommunikation zwischen Routinen mittels Channels. Das Schlüsselwort „chan“ signalisiert einen Channel. Den Typen wählt man passend zur Information, die übergeben werden soll. Während eine Goroutine auf die Information aus einem Channel wartet, pausiert sie die weitere Ausführung ihrer Anweisungen.

Gleiches gilt für das Senden von Informationen per Channels. So kann man zum Beispiel voneinander abhängige Berechnungen in der korrekten Reihenfolge ausführen lassen oder, ganz allgemein gesagt, bestimmte Abläufe synchronisieren. Zudem lässt sich festlegen, ob ein Channel Informationen empfangen oder senden soll.

Channels können mit Routinen geschickt kombiniert werden, zum Beispiel zu Pipelines, die Informationsfluss und Hardwarenutzung optimieren. Da in Go auch die main-Funktion eine Goroutine ist, kann hier ebenfalls mit Channels gearbeitet werden.

Wettlaufsituationen erkennen und vermeiden

Wettlaufsituationen oder Data Race Conditions können bei nebenläufiger Programmierung auftreten, wenn mehrere Prozesse denselben Wert verändern sollen, das Ergebnis aber von der Reihenfolge der Abarbeitung abhängt. Sie verursachen oft Fehler, die nur schwer zu lokalisieren sind.

Go verfügt über ein Tool, mit dem sich Goroutinen mit dem Potenzial für Data Race Conditions aufspüren lassen. Die gefundenen Konstellationen lassen sich dann zum Beispiel über Channels oder Mutex auflösen. Außerdem kennt Go Waitgroups, mit denen man ebenfalls Prozesse synchronisieren kann.

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Aktuelle Beiträge zu diesem Thema

Die Embedded World 2019 in Bildern

Event

Die Embedded World 2019 in Bildern

Auch in diesem Jahr drehte sich auf dem Gelände der Messe Nürnberg an zwei Tagen mal wieder alles um Embedded-Systems. Die internationale Leitmesse Embedded World Exhibition & Conference lud ein und mehr als 1.000 Aussteller nahmen an. lesen

IntelliJ IDEA und Vim unter Linux

Beliebte Code-Editoren, Teil 2

IntelliJ IDEA und Vim unter Linux

IntelliJ IDEA und Vim gehören unter GNU/Linux zu den populärsten Development-Tools. Beide Werkzeuge haben ihre eigenen Vor- und Nachteile, wir sehen uns die Funktionen im Folgenden näher an. lesen

Was Softwareentwickler im Arbeitsalltag bewegt

2019 HackerRank Developer Skills Report

Was Softwareentwickler im Arbeitsalltag bewegt

Welche Programmiersprachen wollen die meisten Softwareentwickler im Jahr 2019 lernen? Und was nervt oder motiviert sie im Arbeitsalltag und bei der Jobsuche? Der Developer Skills Report von HackerRank betrachtet die Welt der Developer aus verschiedenen Perspektiven. lesen

Was tut sich bei DevOps, Blockchain und Java?

Red Hat Predictions 2019

Was tut sich bei DevOps, Blockchain und Java?

Was bringt das neue Jahr für Programmierer und das Software Development? Für die Bereiche Entwickler und DevOps, Java sowie Blockchain haben sich Experten von Red Hat darüber Gedanken gemacht und einige Prognosen abgegeben. lesen

Apache ServiceComb bereit für produktiven Einsatz

Open-Source-Framework für Microservices

Apache ServiceComb bereit für produktiven Einsatz

Wer sich mit der Entwicklung von Microservices beschäftigt, sollte einen genauen Blick auf Apache ServiceComb werfen. Das Projekt wurde im Dezember von der Apache Software Foundation zum Top-Level-Produkt erhoben. lesen

Quantencomputer, Kubernetes und weitere Makrotrends

ThoughtWorks Technology Radar November 2018

Quantencomputer, Kubernetes und weitere Makrotrends

Tools, Techniken, Programmiersprachen und Plattformen: der ThoughtWorks Technology Radar identifiziert zwei Mal im Jahr die wichtigsten Makrotrends. Hier gehen wir nun auf die wichtigsten Entwicklungen in der Welt der Unternehmenstechnologie ein. lesen

Microsoft Azure DevOps Server 2019 RC1 verfügbar

Potenzielles Upgrade für Team Foundation Server

Microsoft Azure DevOps Server 2019 RC1 verfügbar

Microsoft hat mit dem Azure DevOps Server 2019 RC1 den ersten Release Candidate einer On-Premises-Plattform für „Azure DevOps“ veröffentlicht. Damit spricht der Hersteller Kunden an, die eine isolierte Umgebung benötigen oder in einer Region ohne Azure-Anbindung beheimatet sind. lesen

Elastic Stack 6.5 überwacht auch Serverless-Infrastrukturen

Neue Visualisierungs- und Kollaborationswerkzeuge

Elastic Stack 6.5 überwacht auch Serverless-Infrastrukturen

Der Such- und Analyse-Experte Elastic hat mit Elastic Stack 6.5 die neuesten Versionen seiner Open-Source-Dienstprogramme veröffentlicht. Außerdem stellt das Unternehmen im Elastic-APM-Tool Infrastrukturüberwachung, Distributed Tracing Support und Java- und Go-Agenten vor. lesen

Chef-Server fürs Konfigurationsmanagement aufsetzen

AWS OpsWorks for Chef Automate, Teil 1

Chef-Server fürs Konfigurationsmanagement aufsetzen

Der verwaltete Config-Management-Service von AWS hört auf den Namen OpsWorks. Dieser Workshop beschreibt, wie man mit OpsWorks einen Chef-Server aufsetzt und dann einen existenten Host zum Chef-verwalteten Knoten macht, um auf diesem per Rezept eine Webanwendung zu bootstrappen. lesen

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 45446678 / Definitionen)