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

Spickzettel

Go verwendet Konstruktorfunktionen anstelle von Konstruktoren. Die Konvention ist, sie NewTypeName zu nennen und einen Pointer auf das initialisierte Struct zurückzugeben.

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:

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 geben einen Pointer (*StructName) unter Verwendung von & zurück, um das Kopieren des Structs zu vermeiden und es Pointer-Receiver-Methoden zu ermöglichen, direkt zu arbeiten.

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