Go ist eine Programmiersprache und Teil von „The Go Project“. In diesem Projekt befinden sich neben der Sprache noch weitere Bibliotheken und Werkzeuge. Zum einfachen Erlernen lehnt sich Go syntaktisch an C und Java an und bedient sich einiger Konzepte der objektorientierten Programmierung. Des Weiteren hat der Programmierer in Go keinen direkten Einfluss auf Threads, für diesen Zweck existiert der Go Scheduler. Dieser stellt die Schnittstelle zwischen Threads und Koroutinen dar.
„The Go Project“ stammt aus dem Hause Google und gewinnt stetig an Beliebtheit. Go wurde vorrangig für Cloud Server entwickelt, weshalb der Aspekt der Nebenläufigkeit besonders wichtig ist.
Go is a programming language and part of „The Go Project“. In addition to the language, this project also contains other libraries and tools. For easy learning Go leans syntactically on C and Java and uses some concepts of object-oriented programming. Furthermore the programmer in Go has no direct influence on threads, for this purpose the Go Scheduler exists. This represents the interface between threads and coroutines.
„The Go Project“ comes from Google and is steadily gaining popularity. Go was primarily developed for cloud servers, which is why the concurrency aspect is particularly important.
Inhaltsverzeichnis
1 Einleitung
1.1 Motivation
1.2 Zielsetzung
1.3 Aufbau der Arbeit
2 Entstehungsgeschichte
2.1 Entstehung
2.2 Gründe für Go
3 Syntax
3.1 Basisdatentypen, Variablen und Pointer
3.2 Strukturen
3.3 Funktionen
3.4 Objektorientierte Programmierung
3.4.1 Methoden
3.4.2 Datenkapselung
4 Concurrency in Go
4.1 Concurrency
4.2 Goroutinen
4.2.1 Was sind Goroutinen
4.2.2 Erstellung einer Goroutine mit sync.WaitGroup
4.3 Go-Scheduler
4.4 Channels
4.4.1 Was sind Channels?
4.4.2 Syntax
4.5 Pipelines
5 Werkzeuge
5.1 Compiler
5.1.1 Funktionsweise
5.1.2 Build Tags & Umgebungsvariablen
5.2 Go Test
5.3 Go Bench
6 Zusammenfassung & Ausblick
Zielsetzung & Themen
Die vorliegende Seminararbeit verfolgt das Ziel, einen fundierten Überblick über die Programmiersprache Go und ihr Ökosystem zu geben, um Entwicklern den Einstieg zu erleichtern und bei der Technologieentscheidung für zukünftige Projekte beratend zur Seite zu stehen.
- Grundlagen der Go-Syntax und objektorientierte Ansätze
- Mechanismen zur Implementierung von Concurrency
- Funktionsweise des Go-Schedulers und von Channels
- Einsatz von Compiler-Werkzeugen sowie Test- und Benchmark-Suites
Auszug aus dem Buch
4.4 Channels
Channels sind zuständig für die Kommunikation zwischen verschiedenen Goroutinen. Über diese lassen sich Nachrichten verschicken, wobei die Nachrichten nach dem FIFO(First In First out)-Prinzip verschickt und empfangen werden. Wenn eine Nachricht empfangen wird, verschwindet sie aus dem Channel. [2]
Channels haben drei Operationen: senden, empfangen und schließen. Wenn in einer Routine aus einem Channel empfangen wird, welcher leer ist, wartet die Routine bis es etwas zum Empfangen gibt. Ähnlich verhält es sich auch mit dem Senden. Wenn die maximale Kapazität eines Channels erreicht ist, wartet die Routine mit dem Senden bis wieder Platz in dem Channel ist. Senden in einen geschlossenen Channel führt dazu, dass das Programm panic auslöst, wodurch sich das Programm beendet. Empfangen werden können Daten bis der geschlossene Channel leer ist.
Empfangen aus einem leeren geschlossenen Channel gibt lediglich den Nullwert des Datentypen dieses Channels wieder. [4]
Des Weiteren können Channels verschiedene Kapazitäten besitzen und werden eingeteilt in „unbuffered“ und „buffered“ Channels. Buffered Channels haben eine Kapazität größer als 0 und Unbuffered Channels eine von 0. [4]
Zusammenfassung der Kapitel
1 Einleitung: Diese Einleitung führt in die Motivation und Zielsetzung der Arbeit ein und erläutert den Aufbau der Untersuchung.
2 Entstehungsgeschichte: Hier wird der Hintergrund der Sprache Go beleuchtet, einschließlich ihrer Ursprünge bei Google und der primären Beweggründe für ihre Entwicklung.
3 Syntax: Dieses Kapitel gibt einen Einblick in die grundlegende Syntax, von Basisdatentypen und Pointern bis hin zu Strukturen und dem objektorientierten Ansatz in Go.
4 Concurrency in Go: Hier werden die Mechanismen der Nebenläufigkeit, insbesondere Goroutinen, der Go-Scheduler, Channels und Pipelines, detailliert beschrieben.
5 Werkzeuge: Dieses Kapitel behandelt die essenziellen Entwicklungswerkzeuge, wie den Compiler, Build-Tags, sowie die integrierten Funktionen zum Testen und Benchmarking.
6 Zusammenfassung & Ausblick: Der abschließende Teil reflektiert die Ergebnisse der Arbeit und bewertet Go als innovative, wenn auch junge Programmiersprache für zukünftige Technologieentscheidungen.
Schlüsselwörter
Go, Programmiersprache, Google, Concurrency, Goroutinen, Scheduler, Channels, Pipelines, Compiler, Softwareentwicklung, Objektorientierung, Unit-Tests, Benchmarking, Cloud-Server, Nebenläufigkeit
Häufig gestellte Fragen
Worum geht es in dieser Arbeit grundsätzlich?
Die Arbeit bietet eine umfassende Einführung in die Programmiersprache Go und erläutert ihre zentralen Konzepte, Werkzeuge und Anwendungsgebiete im Kontext moderner Softwareentwicklung.
Was sind die zentralen Themenfelder der Arbeit?
Die Schwerpunkte liegen auf der Syntax, der effizienten Umsetzung von Nebenläufigkeit (Concurrency) sowie dem Werkzeugkasten, den das Go-Ökosystem Entwicklern zur Verfügung stellt.
Was ist das primäre Ziel der Arbeit?
Das Hauptziel ist es, dem Leser einen strukturierten Überblick zu verschaffen, um den Einstieg in Go zu erleichtern und eine fundierte Entscheidungsgrundlage für den Einsatz der Sprache in neuen Projekten zu bieten.
Welche wissenschaftliche Methode wurde verwendet?
Die Arbeit basiert auf einer fundierten Literaturanalyse und der Untersuchung technischer Dokumentationen, ergänzt durch anschauliche Codebeispiele zur Verdeutlichung der besprochenen Konzepte.
Was wird im Hauptteil der Arbeit behandelt?
Der Hauptteil gliedert sich in die Syntaxgrundlagen, eine tiefgehende Analyse der Concurrency-Modelle wie Goroutinen und Channels sowie die Erläuterung der unterstützenden Werkzeuge wie Compiler und Test-Frameworks.
Welche Schlüsselwörter charakterisieren die Arbeit?
Die Arbeit wird maßgeblich durch Begriffe wie Go, Concurrency, Goroutinen, Scheduler, Channels, Compiler und Software-Testmethoden geprägt.
Wie unterscheidet sich die objektorientierte Programmierung in Go von Sprachen wie Java?
Go verzichtet bewusst auf klassische Klassen und Vererbungshierarchien zugunsten von Strukturen und expliziter Komposition, um die Einfachheit des Codes zu wahren.
Warum ist das Thema "Concurrency" für Go besonders relevant?
Da Go vorrangig für den Einsatz auf Cloud-Servern entwickelt wurde, ist die effiziente Nutzung von Multi-Core-Prozessoren durch Nebenläufigkeit ein zentrales Architekturmerkmal der Sprache.
Was passiert bei einem "Deadlock" in Go?
Ein Deadlock tritt in Go beispielsweise auf, wenn Goroutinen über Channels kommunizieren, aber durch eine voll belegte Kapazität oder fehlende Empfänger dauerhaft blockiert werden, was zum Programmstillstand führt.
- Quote paper
- Christopher Peters (Author), 2021, Programmiersprache "Go" und Ökosysteme, Munich, GRIN Verlag, https://www.grin.com/document/1044870