Menu
Coddy logo textTech

Methoden für Structs definieren

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

Methoden in Go sind Funktionen mit einem speziellen Receiver-Argument, das die Funktion mit einem struct-Typ verknüpft.

Methodensyntax

func (receiverName StructType) MethodName() ReturnType {
    // Methodenrumpf
}

Definiere ein Struct mit Methoden

type Rectangle struct {
    Width  float64
    Height float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

func (r Rectangle) Perimeter() float64 {
    return 2 * (r.Width + r.Height)
}

Methoden mit Parametern

func (r Rectangle) Scale(factor float64) float64 {
    return r.Area() * factor
}

Methoden aufrufen

rect := Rectangle{Width: 5, Height: 3}
fmt.Println(rect.Area())      // Ausgabe: 15
fmt.Println(rect.Perimeter()) // Ausgabe: 16
fmt.Println(rect.Scale(2))    // Ausgabe: 30

Der Receiver (r Rectangle) ermöglicht es Ihnen, auf die Felder des Structs innerhalb der Methode über die Receiver-Variable r zuzugreifen. Methoden können andere Methoden desselben Structs aufrufen.

challenge icon

Aufgabe

Mittel

Füge dem Circle-Struct drei Methoden hinzu:

  • Area — gibt math.Pi * radius * radius zurück
  • Circumference — gibt 2 * math.Pi * radius zurück
  • Describe — gibt einen String zurück: "Circle with radius X.XX"

Spickzettel

Methoden in Go sind Funktionen mit einem speziellen Receiver-Argument, das die Funktion mit einem Struct-Typ verknüpft.

Methoden-Syntax:

func (receiverName StructType) MethodName() ReturnType {
    // Methodenkörper
}

Beispiel mit einem Struct und Methoden:

type Rectangle struct {
    Width  float64
    Height float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

func (r Rectangle) Perimeter() float64 {
    return 2 * (r.Width + r.Height)
}

Methoden können Parameter akzeptieren:

func (r Rectangle) Scale(factor float64) float64 {
    return r.Area() * factor
}

Methoden aufrufen:

rect := Rectangle{Width: 5, Height: 3}
fmt.Println(rect.Area())      // Ausgabe: 15
fmt.Println(rect.Perimeter()) // Ausgabe: 16
fmt.Println(rect.Scale(2))    // Ausgabe: 30

Der Receiver ermöglicht es Ihnen, auf die Felder des Structs innerhalb der Methode zuzugreifen. Methoden können andere Methoden desselben Structs aufrufen.

Probier es selbst

package main

import "fmt"

func main() {
    var radius float64
    fmt.Scan(&radius)

    c := Circle{Radius: radius}

    fmt.Printf("Area: %.2f\n", c.Area())
    fmt.Printf("Circumference: %.2f\n", c.Circumference())
    fmt.Printf("Description: %s\n", c.Describe())
}
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