Structs und Interfaces

Go Methods: Value and Pointer Receivers

Go has no classes. Attach methods to a type and choose the right receiver.

  • Fortgeschritten
  • 4 Min. Lesezeit
  • 1 ausführbares Beispiel
Das lernst du
  • Methods and receivers
  • Value vs pointer receiver
  • Constructor functions
Receiver → what the method can do
func (r Rectangle) Area()read a copy
func (r *Rectangle) Scale(f)change the original

A function with a receiver

A method is a function with a receiver: the value it is called on, written before the method name. Go has no classes, so methods on structs are how types get behavior.

Area has a value receiver and works on a copy, which is fine for reading. Scale has a pointer receiver, so it changes the original rectangle. Go takes the address for you when you call rect.Scale(2). NewSquare is an ordinary function used as a constructor.

Das Wichtigste

  1. A value receiver works on a copy.
  2. A pointer receiver can change the original.
  3. NewSquare is a normal function used as a constructor.

Ausführbares Go-Beispiel

Go
Code ausführen →
main.go
package main

import "fmt"

type Rectangle struct {
	Width, Height float64
}

func NewSquare(size float64) Rectangle {
	return Rectangle{Width: size, Height: size}
}

// Area has a value receiver: it only reads the rectangle.
func (r Rectangle) Area() float64 {
	return r.Width * r.Height
}

// Scale has a pointer receiver: it changes the rectangle.
func (r *Rectangle) Scale(factor float64) {
	r.Width *= factor
	r.Height *= factor
}

func main() {
	rect := Rectangle{Width: 3, Height: 4}
	fmt.Println("area:", rect.Area())

	rect.Scale(2)
	fmt.Println("scaled:", rect.Width, "x", rect.Height, "=", rect.Area())
	fmt.Println("square:", NewSquare(5).Area())
}
Run-Button für dieses Beispiel erstellen Ergebnis der Ausführung
area: 12
scaled: 6 x 8 = 48
square: 25

Üben

Öffne das Beispiel im Online-Compiler, ändere einen Wert oder füge eine Zeile hinzu und sage die Ausgabe voraus, bevor du es ausführst. Bring den Code danach absichtlich zum Scheitern und lies die Meldung des Compilers.

Lektion fertig?

Markiere sie als gelernt, um deinen Fortschritt zu verfolgen.

Weiter: Pointers →

Mit einer Challenge üben

Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.

Alle Challenges