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

Golang und Kotlin im Vergleich

Programmiersprachen für Cloud-native Anwendungen

Golang und Kotlin im Vergleich

Die beiden Cloud-nativen Sprachen Go und Kotlin bringen ein ganzes Spektrum innovativer Features speziell für Microservices mit. Sie locken gegenüber althergebrachten Alternativen mit dem Versprechen, verteilte Anwendungsausführung auf ein neues Niveau leichtgewichtiger Elastizität zu heben. Entwickler von Cloud-Anwendungen haben jetzt wieder die Qual der Wahl. lesen

API-Kit von Experience One bei GitHub verfügbar

Gratis-Tool zur Entwicklung von Programmierschnittstellen

API-Kit von Experience One bei GitHub verfügbar

Um die Entwicklung von APIs, sprich Programmierschnittstellen zu beschleunigen, stellt Experience One ein API-Kit auf GitHub zur Verfügung. Dies soll insbesondere Unternehmen dabei helfen, digitale Transformationsprojekte voranzutreiben. lesen

Was ist etcd?

Definition „/etc distributed“

Was ist etcd?

Unter etcd ist ein Key-Value-Store zu verstehen, der für verteilte Anwendungen gedacht ist. Er hat die Aufgabe, kritische Daten sicher zu speichern. Er kommt beispielsweise in Kubernetes zum Einsatz und bietet viele Vorteile. lesen

Mega-Trends im Development

Machine Learning, Programmiersprachen und die Cloud

Mega-Trends im Development

Vor dem Hintergrund technologischer Mega-Trends spielen sich in der Softwareentwicklung umwälzende Änderungen ab, und zwar an etlichen Fronten gleichzeitig. Auf Entwickler kommen viele aufregende Möglichkeiten zu. lesen

C#-Programmierung mit .NET-Entwicklungstools

Einstieg in .NET, Visual Studio und Online-Compiler

C#-Programmierung mit .NET-Entwicklungstools

Um C# und .NET für die Entwicklung zu nutzen, sind zunächst keine teuren Tools notwendig. Microsoft stellt die Werkzeuge, die man zum Einstieg in die Programmierung benötigt, kostenlos zur Verfügung. Wir geben einen Überblick. lesen

Effiziente Arbeitskultur im Unternehmen fördern

Moderne Entwicklung – vernetzt und mit Kundenfokus

Effiziente Arbeitskultur im Unternehmen fördern

Mit DevOps lassen sich Anwendungsentwicklung, zugehörige IT-Abläufe und Qualitätssicherung eng verzahnen. Dies trägt dazu bei, die Qualität der Software, die Geschwindigkeit der Entwicklung und Auslieferung sowie das Miteinander der beteiligten internen und externen Teams zu optimieren. lesen

Ausfallsicherheit mit Cloud Foundry

Cloud-agnostische Softwareentwicklung, Teil 2

Ausfallsicherheit mit Cloud Foundry

Cloud Foundry verspricht Entwicklern die Flexibilität Cloud-agnostischer Anwendungsportabilität, den Heiligen Gral der Hochverfügbarkeit. Doch die Befreiung vom Vendor-Lock-In erfordert Disziplin und neue Ansätze der Qualitätssicherung. lesen

Copyleft oder Permissive – was darf es sein?

Glaubenskrieg um verschiedene Lizenzmodelle

Copyleft oder Permissive – was darf es sein?

Auf den ersten Blick sind Open-Source-Lizenzen generell ein Segen: Man darf alles mit so lizenziertem Code anstellen, ihn verändern und sogar weitergeben. Und dennoch tobt seit Jahrzehnten der Zwist: Copyleft gegen Permissive, Politik gegen Technik, FSF gegen OSI oder schlicht GPL gegen BSD, Apache & Co. lesen

RHEL 7 mit neuen Container-Features und mehr

Red Hat Enterprise Linux lässt niemanden zurück

RHEL 7 mit neuen Container-Features und mehr

Obwohl Red Hat Enterprise Linux 8 seit Mai verfügbar ist, hat der Hersteller noch einmal Hand an den Vorgänger gelegt: Red Hat Enterprise Linux 7.7 wurde mit einigen neuen Container-Funktionen veröffentlicht. lesen

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 45446678 / Definitionen)