struct ·
interface ·
Methoden ·
Embedding ·
Type Assertion ·
Generics
Go verwendet ein elegantes Typsystem mit Structs für Datenstrukturen und Interfaces für Polymorphismus. Diese Cheatsheet fasst die grundlegenden Konzepte für die objektorientierte Programmierung in Go zusammen.
Structs sind zusammengesetzte Datentypen, die Felder (Attribute) gruppieren. Sie sind die Grundlage für Datenmodelle in Go und können auch Methoden haben.
| Konzept | Beschreibung |
|---|---|
| Feld-Tags | Metadaten für Serialisierung (JSON, XML, etc.) |
| Anonyme Felder | Felder ohne Namen (für Embedding) |
| Exportierte Felder | Großbuchstaben = öffentlich sichtbar |
| Struct-Literal | Initialisierung mit { } |
| new() | Zeiger auf Zero-Value Struct |
%+v in fmt.Printf zeigt alle Felder mit Namen an – ideal für Debugging von Structs.
Interfaces definieren Methoden-Signaturen. Ein Typ implementiert ein Interface implizit, wenn er alle Methoden des Interfaces besitzt – kein explizites implements wie in anderen Sprachen.
| Konzept | Beschreibung |
|---|---|
| Implizite Implementierung | Ein Typ implementiert ein Interface automatisch |
| Leeres Interface | interface{} – kann jeden Typ speichern (wie any) |
| Interface-Wert | Enthält Typ und Wert (dynamischer Typ) |
| Interface-Verschachtelung | Mehrere Interfaces in einem kombinieren |
| Type Assertion | Wert aus Interface extrahieren |
interface{} (oder any seit Go 1.18) kann Werte beliebigen Typs enthalten – ähnlich wie Object in Java oder any in TypeScript.
Methoden sind Funktionen mit einem Empfänger (Receiver). Sie können auf Wert-Empfängern (Counter) oder Zeiger-Empfängern (*Counter) definiert werden. Zeiger-Empfänger können das Objekt modifizieren.
Embedding ermöglicht die Komposition von Structs und Interfaces. Ein eingebettetes Feld erbt alle Methoden und Felder des eingebetteten Typs – ähnlich wie Vererbung, aber flexibler.
Type Assertion extrahiert den konkreten Wert aus einem Interface. Die "comma ok"-Form verhindert Panics, wenn der Typ nicht übereinstimmt. Type Switches erlauben die Abfrage mehrerer Typen.
Generics (seit Go 1.18) ermöglichen die Definition von Funktionen und Typen, die mit verschiedenen Typen arbeiten können – ähnlich wie Templates in anderen Sprachen.
comparable erlaubt Vergleiche mit == und !=. any ist der neue Name für interface{} und erlaubt jeden Typ.
struct
interface
func (r)
.(type)
[T]
type Person struct { Name string } ·
type Speaker interface { Speak() string }