| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung |
| go [2017-05-31 11:14:03] – manfred | go [2026-01-23 12:05:52] (aktuell) – manfred |
|---|
| | ====== Go ====== |
| | |
| | //siehe auch [[::V]], es fühlt sich an wie [[::Go]], jedoch ohne GC (wie [[::Rust]]) und kann (genauso wie [[::Rust]]) Speichersichere Programme erstellen.// |
| | |
| | * [[https://www.youtube.com/watch?v=a2T9nSdT0y4|Was ist Go?]] |
| | * [[https://entwickler.de/online/development/einfuehrung-programmierung-go-166821.html|Go: Eine Einführung in die Programmierung mit der Programmiersprache]] |
| | * **[[::Go lernen]]** |
| | * [[https://www.tiobe.com/tiobe-index/]] |
| | * 06. Feb. 2019: 1.115% |
| | * 14. Nov. 2014: 0,3 % |
| | |
| | * [[http://golang.org/]] -> Home Page |
| | * [[https://de.wikipedia.org/wiki/Go_(Programmiersprache)#Geschichte]] |
| | * Die Entwurfsphase begann am **21. September 2007**, anfangs als 20-Prozent-Projekt auf Initiative von Robert Griesemer, Rob Pike und Ken Thompson. Bald darauf stießen weitere Entwickler dazu, und Go wurde zum Vollzeit-Projekt. |
| | * Am **30. Oktober 2009** wurde Go von Rob Pike in einem Google TechTalk präsentiert und die Veröffentlichung als freie Software angekündigt, die dann wie angekündigt am **10. November 2009** erfolgte. |
| | * __Am **28. März 2012** wurde Version **1** freigegeben.__ |
| | * Am **14. Mai 2013** wurde Go **1.1** freigegeben, das vor allem Performance-Verbesserungen an der Implementierung enthält. |
| | * Jeweils sechs Monate später erschienen Go 1.2, Go 1.3, Go 1.4, Go 1.5 und Go 1.6. |
| | * [[http://www.admin-magazin.de/News/Go-1.5-veroeffentlicht/%28tagID%29/58|Go 1.5 veröffentlicht]] - 2015-08-20 |
| | * [[https://entwickler.de/online/development/einfuehrung-programmierung-go-166821.html|Go: Eine Einführung in die Programmierung mit der Programmiersprache]] |
| | * **[[https://go.dev/doc/install|Go]]** |
| | * **[[http://tour.golang.org/#1|Go - Tour]]** |
| | * [[http://www.golang-book.com/books/intro|An Introduction to Programming in Go]] - golang-book |
| | * **[[https://forum.golangbridge.org/|Go Forum]]** |
| | * [[http://www.bitloeffel.de/DOC/golang/go_tutorial_de.html|Die Programmiersprache Go]] |
| | * [[http://golang.org/ref/spec|The Go Programming Language Specification]] |
| | * **[[http://www.bitloeffel.de/DOC/golang/effective_go_de.html|Effective Go]]** |
| | * [[https://github.com/golang/go/wiki/NonEnglish]] |
| | * **[[http://www.hweidner.de/golang/|Die Programmiersprache Go]]** |
| | * [[https://www.archium.org/?title=Der_Golang-Spicker|Der Golang-Spicker – ein Go-Handbuch mit lauffähigen Code Snippets in deutsch]] |
| | * [[https://mewe.com/join/golang-de]] |
| | * [[http://www.golem.de/news/llgo-go-compiler-auf-basis-von-llvm-1411-110789.html|Go-Compiler auf Basis von LLVM]] |
| | * [[https://de.wikipedia.org/wiki/Go_(Programmiersprache)]] |
| | * Entwurfsphase begann am 21. September 2007 und am 10. November 2009 wurde "Go" von Google als freie Software veröffentlicht. Im März 2012 erschien Version 1.0 von Compiler und Spezifikation, die Kompatibilität für die kommenden Go-Releases verspricht. |
| | * Tipp für die Websuche nach Go-Ressourcen: statt "go" als Suchbegriff einfach immer **golang** verwenden. |
| | * mehr über "Go" erfahren: |
| | * [[http://www.bitloeffel.de/DOC/golang/go_spec_de.html]] |
| | * Presse: |
| | * [[http://helmbold.de/artikel/pro-contra-go|Pro und contra Go: Welche Vorteile und Nachteile hat die Programmiersprache Go?]] - Der Minimalismus von Go hat schon seinen Charme. Der geringe Hauptspeicherbedarf von Go-Programmen und die eingebaute Parallelisierung machen die Sprache für bestimmte Einsatzgebiete gut geeignet. Go versucht, ein besseres C und eine gute Alternative zu C++ zu sein und erreicht dieses Ziel in vielen Szenarien auch. Wer Java, Scala oder C# gewöhnt ist, dürfte sich mit Go eher nicht so schnell anfreunden. Und so kommen auch die meisten Entwickler von Skriptsprachen wie Python und Ruby zu Go. |
| | * [[http://www.admin-magazin.de/Das-Heft/2012/04/Programmieren-mit-Go|Programmieren mit Go: Moderner Klassiker]] - Die Programmiersprache Go verspricht mit der vor Kurzem erschienenen Version 1 langfristige Kompatibilität. Konzipiert zur Systemprogrammierung, verzichtet sie auf modische Features und ist somit auch interessant für alle, die an akuter Hype-Allergie leiden. ... Go macht keine falschen Versprechungen. Vielleicht ist es gerade das, was die Sprache längerfristig interessant macht. ... Wie C zeigt auch Go seine Stärken bei der Systemprogrammierung, wenngleich sich die Sprache natürlich für nahezu alle Zwecke einsetzen lässt. ... Einfachheit ist eines der hervorstechenden Merkmale von Go. Ihr zuliebe haben die Spracherfinder auf viele Konstrukte verzichtet. In erster Linie soll Go eine konsistente und unzweideutige Syntax besitzen. Das kann man von Sprachen wie etwa Perl, Ruby oder Scala nicht behaupten, die für ein und denselben Zweck eine Vielzahl syntaktischer Konstrukte oder Methoden besitzen. ... Etwas klarer werden Go-Programme noch durch Anleihen bei strukturierten Sprachen wie Pascal, Modula und Oberon. Teilweise war die Go-Syntax schon in Newsqueak und Limbo verwirklicht. |
| | * [[http://www.golem.de/news/programmiersprache-googles-go-1-ist-fertig-1203-90830.html|Googles Go 1 ist fertig]] - Was als Open-Source-Projekt von Google begann, hatte über die letzten Jahre rund 200 Helfer, die nicht von Google kamen. Dabei hat Go einen stabilen Status erreicht, so dass nun Go Version 1 veröffentlicht wurde. Dazu wurde die Spezifikation und auch deren Implementierung in den vergangenen Monaten verbessert. ... Wer mit Go beginnen will, findet unter [[http://golang.org]] eine umfangreiche Dokumentation samt verschiedenen Tutorials. ... Go selbst steht unter der **BSD-Lizenz**. |
| | * [[http://www.golem.de/1111/87764.html|Go 1 soll Anfang 2012 erscheinen]] - Go 1 soll langfristig unterstützt werden, damit erstellte Programme sollen sich auch mit folgenden Minor-Releases übersetzen lassen. Selbst wenn weitere neue Major-Versionen folgen, soll Go 1 mit Sicherheitsupdates weiterhin versorgt werden. |
| | * [[http://www.golem.de/0911/71113.html|Go - schnelle Programmiersprache von Google]] - Das Beste aus dynamischen und kompilierten Sprachen ... Google hat mit Go eine neue Programmiersprache vorgestellt, die die Entwicklungsgeschwindigkeit dynamischer Sprachen wie Python mit der Geschwindigkeit und Sicherheit kompilierter Sprachen von C und C++ verbinden soll. Go sei daher schnell, produktiv, Open Source und mache Spaß, so deren Entwickler. ... Go sei vor allem zur Systemprogrammierung geeignet und bringt Multi-Prozessor-Unterstützung und einen neuen Ansatz in Sachen objektorientietem Design mit, heißt es in Googles Ankündigung. Zudem bietet Go Eigenschaften wie True Closures und Reflection. ... Zu den Entwicklern von Go gehört unter anderem auch Ken Thompson, der einst an der Entwicklung von Unix beteiligt war, die erste Shell schrieb und den C-Vorläufer B entwickelte. Zusammen mit Rob Pike, der ebenfalls zum Go-Team gehört, entwickelte Thompson zudem das Betriebssystem Plan 9. |
| | |
| | Variablen werden mit dem Schlüsselwort »var« deklariert, gefolgt vom Variablennamen und dem Typ, also umgekehrt wie bei C, C++ oder Java: |
| | var x float64 |
| | |
| | Variablennamen können mit jedem Zeichen beginnen, das im Unicode-Standard als Buchstabe gilt, jedoch sollte man es hierbei vernünftigerweise nicht übertreiben. Mit dem Operator »:=« lassen sich Variablen in einem Aufwasch definieren und initialisieren. Das Schlüsselwort »var« kann man hierbei, ebenso wie meist die Typangabe weglassen: |
| | i := 1 |
| | pi := 3.142 |
| | |
| | Auch bei Schleifen haben die Go-Entwickler radikal ausgemistet, was bei näherer Betrachtung durchaus sinnvoll erscheint, denn all die Whiles, Dos und Foreachs lassen sich meist einfach umformulieren. In Go gibt es nur noch die gute alte For-Schleife (Verzicht auf Semikolons am Zeilenende und runde Klammern bei if und for): |
| | for i, route := range router.routes { |
| | if route.pattern == nil { |
| | continue |
| | } |
| | } |
| | |
| | Go erzwingt übrigens bestimmte Formatierungen wie geschweifte Klammern am Zeilenende. |
| | |
| | |
| | ==== Installation ==== |
| | |
| | |
| | === FreeBSD 13.1 === |
| | |
| | > pkg install lang/go |
| | > go version |
| | go version go1.17.6 freebsd/amd64 |
| | |
| | |
| | === Debian 11 === |
| | |
| | > echo "deb http://deb.debian.org/debian $(lsb_release -cs)-backports main contrib non-free" >> /etc/apt/sources.list |
| | > apt update |
| | |
| | > apt search golang |
| | > apt search golang-1 |
| | |
| | > apt install golang-1.19-go git |
| | |
| | > ln -s /usr/lib/go-1.19/bin/gofmt /usr/bin/ |
| | > ln -s /usr/lib/go-1.19/bin/go /usr/bin/ |
| | > go version |
| | go version go1.19.3 linux/amd64 |
| | |
| | |
| | === Ubuntu 12.04 === |
| | |
| | > aptitude install golang |
| | |
| | Nach der Installation finden sich auf der Festplatte, je nach Prozessorarchitektur, die Befehle »6a« , »6c« , »6g« und »6l« oder analoge Befehle mit den Ziffern 5 oder 8. Die 6er-Tools sind für AMD64, die 5er-Reihe für 368 und die 8er für ARM. Die seltsamen Namen sind ebenfalls ein Erbe von Plan9, das über diese Ziffern die Prozessorarchitekturen identifiziert. |
| | |
| | Praktischerweise muss man sich um diese Details in der Praxis nicht kümmern, sondern kann stattdessen einfach das Frontend »go« verwenden. Es sei jedoch noch erwähnt, dass die vom Compiler erzeugten Object-Dateien mit der Endung ».6« Referenzen auf alle verwendeten Module enthält, die der Linker dann verwendet. Damit fällt das Problem weg, dass man zusätzlich zum Einbinden von Header-Dateien auch noch die passenden Libraries finden und beim Linken angeben muss wie von C und C++ bekannt. Wenn sich ein Go-Programm kompilieren lässt, kann der Compiler es auch linken. Die altbekannten Linker-Probleme gehören damit der Vergangenheit an. Auch die Aufgabe von Makefiles übernimmt »go« . |
| | |
| | Wer Go richtig installiert hat, sollte auf der Kommandozeile den Go-Befehl ausführen können: |
| | > go version |
| | go version go1 |
| | |
| | Wenn die Go-Installation nicht automatisch im »PATH« der ausführbaren Dateien enthalten ist, sollte man die Umgebungsvariable »GOROOT« auf das Elternverzeichnis setzen und dann »$GOROOT/bin« in den »PATH« aufnehmen. |
| | |
| | Weil Go-Programme sich wirklich schnell übersetzen lassen, eignen sie sich mit Einschränkungen auch für den Aufruf als Skript, also eine Art selbstgestrickte Just-in-Time-Compilation. Das Tool Gorun unterstützt diesen Prozess. |
| | |
| | |
| | ==== IDE (Entwicklungsumgebung) ==== |
| | |
| | * [[http://go-lang.cat-v.org/text-editors/]] |
| | * [[http://code.google.com/p/golangide/]] |
| | * [[http://code.google.com/p/golangide/downloads/list]] |
| | * [[http://www.mikeparr.info/golinux.html]] |
| | |
| | |
| | ===== Remote Procedure Call - RPC ===== |
| | |
| | * [[http://golang.org/pkg/net/rpc/|RPC mit go]] |
| | |
| | |
| | ===== Beispiel-Programme ===== |
| | |
| | * [[Beispiel-Programme in Go]] |
| | |
| | |
| | ===== RegEx mit Go ===== |
| | |
| | * [[https://gobyexample.com/regular-expressions]] |
| | * [[https://golang.org/pkg/regexp/]] |
| | * **[[https://regex-golang.appspot.com/assets/html/index.html|Regex Tester - Golang]]** |
| |