Grundlagen von Go für Anfänger 01 – Einführung in die Go-Sprache

Die Go-Sprache überdenkt die traditionelle objektorientierte Entwicklung und bietet eine effizientere Möglichkeit, Code wiederzuverwenden. Die Go-Sprache ermöglicht es Benutzern außerdem, alle Kerne auf teuren Servern effizienter zu nutzen und große Projekte schnell zu kompilieren.

Fügen Sie hier eine Bildbeschreibung ein

Lösen Sie moderne Programmierherausforderungen mit Go

Das Go-Sprachentwicklungsteam hat viel Zeit damit verbracht, die Probleme zu lösen, mit denen heutige Softwareentwickler konfrontiert sind. Entwickler müssen sich bei der Auswahl einer Sprache für ihre Projekte zwischen schneller Entwicklung und Leistung entscheiden. Sprachen wie C und C++ bieten eine schnelle Ausführungsgeschwindigkeit, während Sprachen wie Ruby und Python sich durch eine schnelle Entwicklung auszeichnen. Die Go-Sprache verbindet beides und bietet nicht nur eine leistungsstarke Sprache, sondern beschleunigt auch die Entwicklung.

Beim Erkunden der Go-Sprache werden die Leser sorgfältig gestaltete Funktionen und eine prägnante Syntax sehen. Als Sprache definiert Go nicht nur, was getan werden kann, sondern auch, was nicht getan werden kann. Die Syntax der Go-Sprache ist so prägnant, dass sie nur wenige Schlüsselwörter enthält, sodass sie leicht zu merken ist. Der Go-Sprachcompiler ist so schnell , dass er manchmal nicht einmal das Gefühl hat, er würde kompilieren.

Daher können Go-Entwickler die Wartezeit auf die Erstellung ihrer Projekte erheblich verkürzen. Da die Go-Sprache über einen integrierten Parallelitätsmechanismus verfügt, kann die Software erweitert werden und mehr Ressourcen nutzen, ohne dass sie gezwungen ist, eine bestimmte Thread-Bibliothek zu verwenden.

Das Typsystem der Go-Sprache ist einfach und effizient. Es erfordert keinen zusätzlichen Aufwand für die objektorientierte Entwicklung, sodass sich Entwickler auf die Wiederverwendung von Code konzentrieren können. Go 语言还自带垃圾回收器,不需要用户自己管理内存。Werfen wir einen kurzen Blick auf diese Hauptfunktionen.

Parallelität

Die Unterstützung von Go für Parallelität ist eines der wichtigsten Merkmale der Sprache. Eine Goroutine ähnelt einem Thread, benötigt jedoch viel weniger Speicher als ein Thread und erfordert weniger Code, um sie zu verwenden. Ein Kanal ist eine integrierte Datenstruktur, die es Benutzern ermöglicht, typisierte Nachrichten synchron zwischen verschiedenen Goroutinen zu senden. Dadurch kann das Programmiermodell
das Senden von Nachrichten zwischen Goroutinen bevorzugen, anstatt dass mehrere Goroutinen um dieselben Daten konkurrieren. Schauen wir uns die Details dieser Funktionen an.

1.Goroutine

Eine Goroutine ist eine Funktion, die parallel zu anderen Goroutinen und auch parallel zum Hauptprogramm (dem Einstiegspunkt des Programms) ausgeführt werden kann.

Führen Sie mehrere Goroutinen in einem einzelnen Systemthread aus
Fügen Sie hier eine Bildbeschreibung ein

2. Gang

Ein Kanal ist eine Datenstruktur, die eine sichere Datenkommunikation zwischen Goroutinen ermöglicht. Kanäle können Benutzern dabei helfen, Probleme beim Zugriff auf den gemeinsamen Speicher zu vermeiden, die in anderen Sprachen häufig auftreten.

Der schwierigste Teil der Parallelität besteht darin, sicherzustellen, dass andere gleichzeitig laufende Prozesse, Threads oder Goroutinen die Daten des Benutzers nicht versehentlich ändern. Eine Katastrophe tritt immer auf, wenn verschiedene Threads dieselben Daten ohne Synchronisierungsschutz ändern. Wenn Sie in anderen Sprachen globale Variablen oder gemeinsam genutzten Speicher verwenden, müssen komplexe Sperrregeln verwendet werden, um eine asynchrone Änderung derselben Variablen zu verhindern.

Um dieses Problem zu lösen, bieten Kanäle einen neuen Modus, um die Datensicherheit bei gleichzeitiger Änderung zu gewährleisten**. Der Kanalmodus stellt sicher, dass nur eine Goroutine gleichzeitig Daten** ändern kann. Kanäle werden zum Senden von Daten zwischen mehreren laufenden Goroutinen verwendet.

Senden Sie Daten mithilfe von Kanälen sicher zwischen Goroutinen

Fügen Sie hier eine Bildbeschreibung ein

Typsystem der Go-Sprache

Die Go-Sprache bietet ein flexibles, vererbungsfreies Typsystem, das die Wiederverwendung von Code maximiert, ohne die Ausführungsleistung zu beeinträchtigen.

Dieses Typensystem unterstützt weiterhin die objektorientierte Entwicklung, vermeidet jedoch die Probleme der herkömmlichen objektorientierten Entwicklung. Wenn Sie schon einmal wochenlang darüber nachgedacht haben, wie man Klassen und Schnittstellen in komplexen Java- und C++-Programmen abstrahiert, wird Ihnen klar, wie einfach das Typsystem der Go-Sprache ist.

Go-Entwickler verwenden das Kompositionsentwurfsmuster, um alle Funktionen wiederzuverwenden, indem sie einfach einen Typ in einen anderen einbetten. Auch andere Sprachen können Komposition verwenden, diese müssen jedoch an die Vererbung gebunden sein, was die gesamte Verwendung sehr kompliziert und schwierig macht.

In der Go-Sprache besteht ein Typ aus anderen kleineren Typen, wodurch das traditionelle vererbungsbasierte Modell umgangen wird.

1. Einfacher Typ

Die Go-Sprache verfügt nicht nur über integrierte Typen wie int und string, sondern unterstützt auch benutzerdefinierte Typen. In der Go-Sprache enthalten benutzerdefinierte Typen normalerweise eine Reihe typisierter Felder zum Speichern von Daten. Allerdings können Go-Sprachtypen Methoden deklarieren, die mit Daten dieses Typs arbeiten. Im Gegensatz zu herkömmlichen Sprachen, die Vererbung verwenden, um Strukturen zu erweitern – Client erbt von User und User erbt von Entity – erstellen Go-Entwickler kleinere Typen – Customer und Admin – und kombinieren diese kleinen Typen dann zu größeren Typen.

Eine Go-Schnittstelle modelliert eine Reihe von Verhaltensweisen

Schnittstellen werden verwendet, um das Verhalten von Typen zu beschreiben. Wenn eine Instanz eines Typs eine Schnittstelle implementiert, bedeutet dies, dass die Instanz einen bestimmten Satz von Verhaltensweisen ausführen kann. Sie müssen nicht einmal deklarieren, dass diese Instanz eine Schnittstelle implementiert, Sie müssen lediglich diese Verhaltensweisen implementieren.

Andere Sprachen nennen diese Funktion „Duck Typing“ – wenn es wie eine Ente quakt, ist es wahrscheinlich eine Ente. Die Go-Sprachschnittstelle macht dasselbe. Wenn in der Go-Sprache ein Typ alle Methoden einer Schnittstelle implementiert, können Instanzen dieses Typs ohne zusätzliche Deklarationen in Instanzen dieses Schnittstellentyps gespeichert werden.

Vergleich zwischen Vererbung und Zusammensetzung

Fügen Sie hier eine Bildbeschreibung ein
In einer streng objektorientierten Sprache wie Java drehen sich alle Designs um Schnittstellen. Vor dem Codieren müssen Benutzer oft über eine riesige Vererbungskette nachdenken.

Es gibt wesentliche Unterschiede zwischen den Schnittstellensystemen traditioneller objektorientierter Programmiersprachen. Die Schnittstellen von Go sind kleiner und definieren in der Regel nur eine einzige Aktion. In der tatsächlichen Verwendung ist dies förderlicher für die Wiederverwendung von Code durch Komposition.

Speicherverwaltung

Eine unsachgemäße Speicherverwaltung kann zu Programmabstürzen oder Speicherverlusten oder sogar zum Absturz des gesamten Betriebssystems führen. Die Go-Sprache verfügt über einen modernen Garbage-Collection-Mechanismus , der Ihnen bei der Lösung dieses Problems helfen kann. In anderen Systemsprachen (wie C oder C++) muss dieser Speicher vor der Verwendung zugewiesen und nach der Verwendung freigegeben werden. Selbst eine falsche Handlung kann zum Absturz des Programms oder zu einem Speicherverlust führen. Leider ist es an sich schon sehr schwierig zu verfolgen, ob Speicher noch verwendet wird, und die Unterstützung von Multithreading und hoher Parallelität macht es noch schwieriger. Obwohl die Garbage Collection der Go-Sprache einen gewissen Mehraufwand mit sich bringt, kann sie die Entwicklungsschwierigkeiten beim Programmieren erheblich reduzieren. Die Go-Sprache überlässt die uninteressante Speicherverwaltung professionellen Compilern und ermöglicht es Programmierern, sich auf interessantere Dinge zu konzentrieren .

Die Gründe für die Wahl der Go-Sprache sind also die Wiederverwendung von Code, die Selbstverwaltung des Speichers und ein hervorragender Mechanismus für die Parallelitätsverarbeitung .

Eine Sache ist, dass es für Leute wie mich, die einen Java-Hintergrund haben, wirklich schwierig ist, sich an die Verwendung der Go-Oberfläche zu gewöhnen, als ich sie zum ersten Mal benutzte.

Supongo que te gusta

Origin blog.csdn.net/hai411741962/article/details/132603129
Recomendado
Clasificación