Menu
Coddy logo textTech

Konstruktor-Funktionen

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

Go hat keine Konstruktoren wie andere Sprachen. Stattdessen ist es üblich, eine Funktion namens NewTypeName zu erstellen, die ein initialisiertes Struct zurückgibt, oft als Pointer.

Grundlegende Konstruktor-Funktion

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,
    }
}

Verwendung von Konstruktorfunktionen

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

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

Konstruktorfunktionen geben unter Verwendung von & einen Pointer (*StructName) zurück. Dies vermeidet das Kopieren des Structs und ermöglicht es Methoden mit Pointer-Receivern, direkt zu arbeiten. Validierung und Standardwerte gehören in den Konstruktor.

challenge icon

Aufgabe

Mittel

Erstellen Sie eine Konstruktor-Funktion NewBankAccount für das BankAccount-Struct mit Validierung:

  • Nimmt name (string) und balance (float64) als Parameter entgegen
  • Wenn name leer ist, setzen Sie den Standardwert auf "Unnamed"
  • Wenn balance negativ ist, setzen Sie den Standardwert auf 0
  • Setzen Sie Owner immer auf "Default Owner"
  • Geben Sie einen Pointer auf das neue Struct 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