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 / 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

Oracle Cloud Infrastructure mit Java-Support

Integration des Java Development Kit

Oracle Cloud Infrastructure mit Java-Support

Oracle hat das Development-Kit der Java Standard Edition als festen Bestandteil in die Oracle Cloud Infrastructure integriert. Neben der Protokollierung von Fehlern wirbt der Anbieter mit regelmäßigen Stabilitäts-, Leistungs- und Sicherheitsupdates. lesen

K8s feiert auf KubeCon + CloudNativeCon

5. Geburtstag der Container-Wundertüte Kubernetes

K8s feiert auf KubeCon + CloudNativeCon

Die vom 20. bis 23. Mai in Barcelona ausgerichtete KubeCon + CloudNativeCon Europe 2019 war gleichsam eine Art Geburtstagsparty für die 2014 erschienene Container-Orchestrierungs-Lösung Kubernetes. 7.700 Besucher feierten eine geradezu wuchernde Plattform der Plattformen. lesen

Abstimmen und eines von drei Microsoft Surface Go 64GB S gewinnen

Dev-Insider Award 2019

Abstimmen und eines von drei Microsoft Surface Go 64GB S gewinnen

Wer die Wahl hat, hat zwar die Qual, darf vor allem aber mitbestimmen! So dürfen Sie als Leserinnen und Leser bereits zum fünften Mal im Rahmen unseres Readers’ Choice Awards entscheiden, wer für Sie die aktuell besten Development-Anbieter auf dem Markt sind. lesen

Pivotal Cloud Foundry 2.5 veröffentlicht

Neue Features und Beta-Tools für die Cloud-Plattform

Pivotal Cloud Foundry 2.5 veröffentlicht

Pivotal hat just seine Version 2.5 der Open-Source-Multi-Cloud-Plattform Cloud Foundry vorgestellt und verspricht eine ganze Reihe größerer wie kleinerer Neuerungen, beispielsweise die flexiblere Einbindung von Kubernetes. lesen

Time Travel Debugging für Web Apps

Preview in Visual Studio Enterprise 2019

Time Travel Debugging für Web Apps

Microsoft spendiert Visual Studio Enterprise 2019 eine Preview auf ein „Zeitreise“-Feature: Mittels Time Travel Debugging, kurz TTD, lassen sich innerhalb einer Azure Virtual Machine laufende Webanwendungen aufzeichnen. lesen

10 Tipps für die DevSecOps-Strategie

Sichere Entwicklungsprozesse in agilen Umgebungen

10 Tipps für die DevSecOps-Strategie

Agile Entwicklung und DevOps haben zwar die Software-Entwicklung und -Bereitstellung beschleunigt, doch darunter leidet mitunter die Sicherheit. Wenn die Qualitätssicherung nicht Schritt halten kann, entsteht fehlerhafter und anfälliger Code. Checkmarx gibt 10 Tipps für die DevOps-Strategie. lesen

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

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)