Middle
Wie werden die Konzepte der objektorientierten Programmierung (OOP) in der Programmiersprache Go umgesetzt?
sobes.tech KI
Antwort von AI
In Go gibt es keine klassischen Konzepte von Klassen, Vererbung und virtuellen Methoden, wie sie in anderen Sprachen (Java, C++) üblich sind. Objektorientierte Programmierung wird in Go durch folgende Mittel realisiert:
- Structs: Gruppieren Daten (Felder).
type Person struct { Name string Age int } - Methoden: Funktionen mit einem assoziierten Empfänger (Struct oder anderer Typ). Ermöglichen es Structs, Verhalten zu haben.
func (p Person) Greet() string { return "Hello, my name is " + p.Name }- Empfänger nach Wert: Die Methode arbeitet mit einer Kopie der Struct. Änderungen innerhalb der Methode beeinflussen die Original-Struct nicht.
- Empfänger nach Zeiger: Die Methode arbeitet mit der Original-Struct über einen Zeiger. Änderungen innerhalb der Methode beeinflussen die Original-Struct.
- Interfaces: Definieren eine Reihe von Methodensignaturen, die ein Typ erfüllen muss. Sie bieten Polymorphismus "nach Enten-Typisierung" (
duck typing). Ein Typ implementiert implizit ein Interface, wenn er alle seine Methoden implementiert.type Greeter interface { Greet() string } func SayHello(g Greeter) string { return g.Greet() } - Embedding: Erlaubt es, dass eine Struct eine andere Struct oder ein Interface "embedden" kann. Dies ist keine Vererbung im klassischen Sinne, sondern eher Komposition. Die eingebettete Struct wird zu einem anonymen Feld, auf das direkt über die Instanz zugegriffen werden kann.
type Employee struct { Person // eingebettete Struct ID string } // Employee hat jetzt die Felder Name und Alter sowie die Methode Greet() e := Employee{ Person: Person{Name: "Alice", Age: 30}, ID: "E123", } fmt.Println(e.Greet()) // Aufruf der Methode Greet() der Person über Employee
| OOP-Konzept | Umsetzung in Go | Anmerkungen |
|---|---|---|
| Klassen | Structs | Es gibt kein explizites Schlüsselwort class |
| Kapselung | Exportierte (mit Großbuchstaben beginnende) / nicht exportierte (mit Kleinbuchstaben beginnende) Felder/Methoden | Sichtbarkeitskontrolle auf Paket-Ebene |
| Vererbung | Embedding | Komposition statt hierarchischer Vererbung |
| Polymorphismus | Interfaces | Duck Typing, implizite Implementierung von Interfaces |