Hallo allerseits! Heute teilen wir den letzten Teil der Übersetzung des Artikels „Was ist und was nicht in Go“. Wir erinnern Sie daran, dass wir im
ersten Teil über die Elemente gesprochen haben, die in Go enthalten sind. Heute werden wir darüber sprechen, was nicht in Go enthalten ist.
Die Übersetzung dieses Materials wurde im Vorgriff auf den Start eines neuen Streams im Golang Developer- Kurs vorbereitet .
Go wurde mit einem Rückblick erstellt und sein Basispaket ist wirklich gut zusammengesetzt: Es verfügt über Garbage Collection, Pakete, erstklassige Funktionen, einen lexikalischen Bereich, eine Systemaufrufschnittstelle und unveränderliche Zeilen, deren Text normalerweise in UTF-8 codiert ist. Es hat jedoch relativ wenige Funktionen und wird ihre Anzahl wahrscheinlich nicht erhöhen. Beispielsweise gibt es keine impliziten numerischen Konvertierungen, keine Konstruktoren oder Destruktoren, keine Operatorüberladungen, keine Standardparameterwerte, keine Vererbung, keine Generika, keine Ausnahmen, keine Makros, keine Funktionsanmerkungen und keinen lokalen Stream-Speicher.
Artikel nicht in Go gefunden
Implizite Zahlenkonvertierung
Bei der Programmierung umfasst die Typkonvertierung das Ändern des Datentyps eines Objekts in einen anderen. Implizite Konvertierung bedeutet, dass diese Änderung automatisch vom Interpreter oder Compiler vorgenommen wird. Beispiel: Zuweisen eines int-Werts zu einer Variablen, der zuvor ein Gleitkommawert zugewiesen wurde. Diese Konvertierung ist in Go nicht verfügbar. Wenn ein Typ beim Deklarieren einer Variablen nicht erwähnt wird, wird ihm basierend auf der Syntax des Literal ein geeigneter Typ zugewiesen, z. B. int, float, string usw. Im folgenden Beispiel gibt Go einen Fehler aus, da zwei verschiedene Datentypen gefunden werden und nicht mit ihnen gearbeitet werden kann. Dies liegt daran, dass der Go-Compiler
int
implizit in
float64
.
a := 1.0
Konstruktoren und Destruktoren
Die Aufgabe der Designer ist die primäre Verarbeitung und Initialisierung des Objekts, und der Destruktor besteht darin, das Objekt nach seiner Lebensdauer und seinem freien Speicher zu zerstören. Im Gegensatz zu anderen objektorientierten Paradigmen gibt es in Go keine Klassen. Daher existiert auch das Konzept der Konstruktoren und Destruktoren nicht.
Bedienerüberlastung
Operatorüberladung ist die Art und Weise, wie Operatoren benutzerdefinierte Operationen ausführen können. Operatoren verhalten sich gemäß den übergebenen Argumenten. In C ++
+
Operator verwendet werden, um Zeichenfolgen zu kombinieren und zwei Ganzzahlen hinzuzufügen. Der Wert „+“ kann auch vom Benutzer definiert und entsprechend den Anforderungen des Programms geändert werden. In JavaScript führt eine Operation vom Typ
'1' + 1
aufgrund der höheren Priorität der Zeichenfolgen zur Ausgabe der Zeichenfolge
"11"
. Solche Definitionen sind in Go nicht zulässig, die Operatoren arbeiten streng und führen Operationen nur mit bestimmten Datentypen von Argumenten aus.
Standardwerte
Go erlaubt keine Standardeinstellungen in Funktionsprototypen oder wenn Funktionen überlastet sind. Die Go-Sprachspezifikation ist ungewöhnlich klein und wird speziell unterstützt, um das Parsen zu vereinfachen. Im Gegensatz zu anderen Sprachen, in denen Sie Standardwerte / optionale Parameter an eine Funktion übergeben können, können Sie in Go nur überprüfen, ob ein Wert übergeben wurde. Ein anderer Ansatz für die Standardwerte in Go wäre ungefähr so.
func Concat1(a string, b int) string { if a == "" { a = "default-a" } if b == 0 { b = 5 } return fmt.Sprintf("%s%d", a, b) }
Vererbung
Da Go nicht der bekannten Hierarchie von Klassen objektorientierter Programmierung folgt, werden Strukturen in Go nicht voneinander geerbt. Im Allgemeinen ist die Vererbung eine Prozedur in OOP-Sprachen, bei der eine Klasse die Eigenschaften und die Klassenmethode ihrer Eltern erbt. Die Vererbung kann tief in mehrere Ebenen gehen. In Go kann eine Struktur jedoch einfach durch Bereitstellen eines Zeigers oder Einbetten in kollaborative Strukturen kompiliert werden. Eine Beispielkomposition für Go ist unten angegeben. Das Ersetzen von Klassen kann eine Schnittstelle in Go sein. Schnittstellen existieren in anderen Sprachen, aber Go-Schnittstellen sind implizit erfüllt.
type TokenType uint16 type Token struct { Type TokenType Data string } type IntegerConstant struct { Token *Token Value uint64 }
Allgemeine Programmierung
Generische Programmierung ist eine Form, in der wir als Generika bekannte Muster einfügen, die nicht wirklich der wahre Quellcode sind, sondern vom Compiler kompiliert werden, um sie in Quellcode zu konvertieren. Versuchen wir, die Muster auf einfache Weise zu verstehen. Stellen Sie sich Muster in der Programmierung als Form vor. Wir erstellen ein Formular, in dem wichtige Details der Vorlage leer bleiben und später beim Kompilieren ausgefüllt werden müssen. Wenn wir dann etwas aus dieser Vorlage erstellen müssen, geben wir einfach die Details an, z. B. Typ.
template<typename T> class MyContainer {
Das obige Snippet ist in C ++ geschrieben. Die Vorlage wird nicht mit einem Typ bereitgestellt, sondern bei der Initialisierung von MyContainer. Wir können je nach Bedarf auch andere Typen wie
float
,
double
usw. angeben. Verallgemeinerte Vorlagen sind nützlich, wenn Algorithmen für einen Datensatz verschiedener Typen ausgeführt werden.
Ausnahmen
Eine Ausnahme weist auf eine vernünftige Bedingung hin, die die Anwendung möglicherweise abfangen möchte. Durch Ausnahmen können wir Situationen lösen, in denen das Programm möglicherweise nicht funktioniert. Eine aktivierte Ausnahme führt nicht zu einem vollständigen Stopp der Ausführung, sondern kann abgefangen und verarbeitet werden. Go hat keine Ausnahmen, es hat nur Fehler wie Schnittstellen und eingebaute Fehler. Der Hauptunterschied zwischen Fehlern und Ausnahmen besteht darin, dass sie auf ein ernstes Problem hinweisen und sofort behoben werden sollten, damit die Go-Programmierung strenger wird. Fehler in Go müssen explizit überprüft werden, sobald sie auftreten.
Makros
Makros sind Makrobefehle. Dies ist eine Möglichkeit, sich wiederholende Programmieraufgaben zu minimieren, indem eine vordefinierte Ausgabe für einen bestimmten Satz von Eingaben definiert wird. Wenn wir beispielsweise das Quadrat einer Zahl in C erhalten möchten, können wir einfach
x * x
schreiben, wobei
x
eine Variable ist, aber wir können auch ein Makro definieren, das das Quadrat einer Zahl jedes Mal zurückgibt, wenn wir es benötigen. Makros sind keine Funktionen. Makros sind in Go nicht verfügbar.
#define square(x) ((x) * (x)) int main() { int four = square(2);
Funktionsanmerkungen
Mit Anmerkungen können Metadaten Funktionsparametern zugeordnet werden. In Python werden Anmerkungen syntaktisch unterstützt und sind vollständig optional. Schauen wir uns ein kleines Beispiel an, um Anmerkungen in Python zu beschreiben.
def foo(a: int, b: 'description', c: float) -> float: print(a+b+c) foo(1, 3, 2)
Im obigen Code sind die Parameter
a
,
b
und
c
mit einigen Metadaten versehen.
a
und
c
int
und
float
Typen versehen, während
b
mit einer Zeichenfolgenbeschreibung versehen ist.
foo
druckt trotz der in den Anmerkungen genannten Art von Argumenten eine bestimmte Ausgabe.
Lokaler Stream-Speicher
Der lokale Stream-Speicher ist eine Computerprogrammierungsmethode, die statischen oder globalen Speicher verwendet, der in einem Stream lokalisiert ist. Dies ist ein statischer Bereich, in den Daten für jeden Stream im Programm kopiert werden. Wenn mehrere Streams dieselben statischen Daten für dieselbe Aufgabe verwenden, können sie diese aus dem lokalen Stream-Speicher kopieren, anstatt sie selbst zu speichern.
Fazit
Go hat sich auf Einfachheit und Eleganz konzentriert. Es hat eine schnelle, kleine und einfache Syntax. Im Gegensatz zu anderen OOP-Sprachen gibt es weniger Konzepte, die im Kopf hinterlegt werden sollten. Die Schöpfer von Go wählten die Einfachheit der Sprache, ohne benachbarten Teilen der Sprache eine multiplikative Komplexität hinzuzufügen. Daher verfügt Go nicht über Funktionen, die den Parser langsamer und größer machen. Einfachheit ist der Schlüssel zu guter Software.
HINWEIS Die Codefragmente in diesem Artikel wurden aus verschiedenen Artikeln im Internet kopiert.
Das ist alles.
Lesen Sie den ersten Teil