Menu
CoddyTech

Konstruktorfunktionen

Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy. Lektion 10 von 107.

Go hat keine Konstruktoren wie andere Sprachen. Stattdessen besteht die Konvention darin, eine Funktion namens NewTypeName zu erstellen, die eine initialisierte Struktur zurückgibt, häufig als Zeiger.

Einfache Konstruktorfunktion

type Person struct {
    Name string
    Age  int
}

func NewPerson(name string, age int) *Person {
    return &Person{
        Name: name,
        Age:  age,
    }
}

Konstruktor mit Standardwerten

type Config struct {
    Host    string
    Port    int
    Timeout int
}

func NewConfig(host string) *Config {
    return &Config{
        Host:    host,
        Port:    8080,    // Standardwert
        Timeout: 30,      // Standardwert
    }
}

Konstruktor mit Validierung

func NewPerson(name string, age int) *Person {
    if name == "" {
        name = "Unknown"
    }
    if age < 0 {
        age = 0
    }
    return &Person{
        Name: name,
        Age:  age,
    }
}

Konstruktorfunktionen verwenden

func main() {
    p1 := NewPerson("Alice", 25)
    fmt.Println(p1.Name) // Alice

    p2 := NewPerson("", -5)
    fmt.Println(p2.Name) // Unknown
    fmt.Println(p2.Age)  // 0
}

Konstruktorfunktionen geben mithilfe von & einen Zeiger (*StructName) zurück. Dadurch wird vermieden, dass die Struktur kopiert wird, und Methoden mit Zeigerempfängern können direkt funktionieren. Validierung und Standardwerte gehören in den Konstruktor.

challenge icon

Aufgabe

Mittel

Erstelle eine Konstruktorfunktion NewBankAccount für die Struktur BankAccount mit Validierung:

  • Nimmt name (string) und balance (float64) als Parameter entgegen
  • Wenn name leer ist, verwende standardmäßig "Unnamed"
  • Wenn balance negativ ist, verwende standardmäßig 0
  • Setze Owner immer auf "Default Owner"
  • Gib einen Zeiger auf die neue Struktur zurück

Probier es selbst

package main

import "fmt"

func main() {
    var name string
    var balance float64
    fmt.Scan(&name, &balance)

    account := NewBankAccount(name, balance)

    fmt.Printf("Account: %s\n", account.Name)
    fmt.Printf("Balance: %.2f\n", account.Balance)
    fmt.Printf("Owner: %s\n", account.Owner)
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Go-Compiler