Menu
Coddy logo textTech

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.

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

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

  • Akzeptiert name (string) und balance (float64) als Parameter
  • Wenn name leer ist, standardmäßig "Unnamed" verwenden
  • Wenn balance negativ ist, standardmäßig 0 verwenden
  • Owner immer auf "Default Owner" setzen
  • Einen Zeiger auf die neue Struktur zurückgeben

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