Der aktuelle Bereich der Informatik entwickelt sich ständig weiter und ist innovativ. Bei den Programmiersprachen wurden die früher üblichen objektorientierten Programmiersprachen wie Java, C++ etc. inzwischen durch neue Programmiersprachen ersetzt. Unter ihnen ist Golang, das bei Entwicklern sehr beliebt ist, eine Sprache, die das traditionelle objektorientierte Programmiermodell nicht unterstützt. In diesem Artikel wird untersucht, warum Golang keine „Klassen“ hat und wie ähnliche Programmiermodelle auf andere Weise implementiert werden können.
Golangs Design zum Entfernen von Klassen ist ein Versuch, dem traditionellen objektorientierten Sprachdesign entgegenzuwirken. In traditionellen objektorientierten Sprachen ist eine Klasse eine feste Programmstruktur, die Eigenschaften und Methoden enthält. Daher ist es beim Entwurf eines Systems, das objektorientierte Programmierung (OOP, Object-Oriented Programming) unterstützt, normalerweise erforderlich, sich mit objektorientierten Klassen zu befassen.
Golang ist jedoch nicht nur eine Programmiersprache mit objektorientierten Sprachfunktionen, ihr Ziel ist es, eine Allzwecksprache zu werden, die sowohl prozedurale als auch objektorientierte Programmierparadigmen enthält. Daher verfügt Golang über einige sehr nützliche Programmierfunktionen, darunter:
In Golang gibt es im Gegensatz zu herkömmlichen objektorientierten Sprachen wie Java und C++ keine Klassen, sondern „Strukturen“. die ein benutzerdefinierter Typ sind. Durch Strukturen können wir Variablen organisieren und zusammenpacken und dann Methoden verwenden, um diese Strukturen zu bearbeiten.
Das Folgende ist beispielsweise eine einfache Strukturdefinition:
type Person struct { name string age int }
Beispiel für die Erstellung einer Personenstruktur:
p1 := Person{name: "John", age: 26}
Rufen Sie die Methode der Struktur auf:
p1.hello() //在Person结构中定义的方法
Durch Strukturen können wir problemlos klassenähnliche Operationen implementieren Es besteht keine Notwendigkeit, feste Klassen in objektorientierten Programmiersprachen zu verwenden.
Eine Methode in Golang ist eine Funktion, die eine Struktur bearbeiten kann. Durch die Definition von Methoden über Strukturtypen können Variablen an Methoden gebunden werden, anstatt Methoden wie herkömmliche objektorientierte Sprachen an Klassen zu binden. Mit Methoden können Strukturen manipuliert und Operationen an ihnen ausgeführt werden.
Zum Beispiel können Sie für die im obigen Beispiel definierte Personenstruktur eine Begrüßungsmethode definieren:
func (p Person) hello() { fmt.Printf("My name is %s, I'm %d years old.\n", p.name, p.age) }
Die Methode im obigen Beispiel wird direkt in der Struktur definiert, was ein bisschen der „Mitgliedsmethode“ im Objekt ähnelt -orientierte Programmierung. In Golang werden Methoden für eine Struktur normalerweise in der Definitionsdatei der Struktur definiert, die Definitionsdatei ist jedoch nicht erforderlich.
In Golang ist die Schnittstelle ein benutzerdefinierter Typ. Eine Schnittstelle definiert die Signaturen einer Reihe von Methoden, und ein Typ wird als Typ betrachtet, der die Schnittstelle implementiert, wenn er alle erforderlichen Methoden definiert. Ein Typ mit einer Schnittstelle kann durch eine Schnittstelle ersetzt und mit demselben Methodensatz definiert werden.
Schnittstelle ist ein sehr wichtiges Konzept in Golang, das die Beziehung zwischen den Modulen des Programms transparenter machen kann. Wenn Entwickler eine Schnittstelle zu einem Modul bereitstellen, können sie die Signatur der aufgerufenen Methode beibehalten, ohne die spezifische Implementierung des Moduls implementieren zu müssen. Nachfolgende Entwickler können es durch eine umfangreichere Implementierung ersetzen, was zur Verbesserung der Skalierbarkeit des Programms beiträgt.
Golangs Funktionen sind erstklassige Bürger, was bedeutet, dass Funktionen Objekte sind. Funktionen können Variablen zugewiesen werden und von anderen Funktionen als Parameter und Rückgabewerte empfangen werden. Dies ist ein sehr wichtiges Konzept in Golang, da viele Leute denken, dass Funktionen eine natürlichere Möglichkeit sind, objektorientiertes Design zu erstellen.
Obwohl Golang selbst kein Klassenkonzept hat, können Entwickler Strukturen und Methoden verwenden, um dieses Programmiermodell zu simulieren. Diese Methode wird in Go als „Instanz“ bezeichnet.
Angenommen, wir möchten klassenähnliche Operationen für eine Struktur namens Person definieren:
type Person struct { name string age int }
Hier sind einige Methoden (ähnlich den Klassenmitgliedsfunktionen):
func (p *Person) SetName(name string) { p.name = name } func (p *Person) SetAge(age int) { p.age = age } func (p *Person) GetAge() int { return p.age }
Im obigen Beispiel sind drei Methoden für Manipulate the Person definiert Struktur: SetName, SetAge und GetAge. Der ursprüngliche Wert der Struktur kann mithilfe von Zeigerparametern geändert werden.
Hier ist ein Beispiel für die Erstellung einer Personenstruktur:
p := Person{"Golang", 10}
wobei „p“ eine „Instanz“ wie eine Klasse ist.
Als nächstes können wir mithilfe einer Funktion eine neue Instanz der Struktur „erstellen“. Hier ist ein Beispiel:
func NewPerson(name string, age int) *Person { p := Person{name, age} return &p }
Die Funktion „NewPerson“ kann wie folgt verwendet werden und gibt einen Zeiger auf eine „Golang“-Instanz zurück:
p := NewPerson("Golang", 10)
Obwohl „Instanz“ in herkömmlichen objektorientierten Programmiersprachen nicht wie „Klasse“ ist , aber die Art und Weise, wie Strukturen und Methoden in Golang verwendet werden, kann das Konzept von Klassen sehr ähnlich simulieren.
Obwohl es keine Klassen gibt, vereinbaren Golangs Strukturen und Methoden die Verwendung objektorientierter und prozeduraler Programmierparadigmen. Mithilfe von Strukturen und Methoden können wir ein klassenähnliches Programmiermodell implementieren, um Variablen und Operationen zu verwalten. Daher kann Golang diese sehr nützlichen Sprachfunktionen auch ohne Klassen nutzen, was es zu einer schnellen, flexiblen und leistungsstarken Webentwicklungssprache macht.
Das obige ist der detaillierte Inhalt vonWarum Golang keine „Klassen' hat. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!