Structs et interfaces

Go Methods: Value and Pointer Receivers

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

  • Intermédiaire
  • 4 min de lecture
  • 1 exemple exécutable
Ce que vous allez apprendre
  • 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.

Points clés

  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.

Exemple Go exécutable

Go
Exécuter le code →
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())
}
Obtenir un bouton Run pour cet exemple Résultat de l'exécution
area: 12
scaled: 6 x 8 = 48
square: 25

S'entraîner

Ouvrez l'exemple dans le compilateur en ligne, modifiez une valeur ou ajoutez une ligne, et devinez la sortie avant de l'exécuter. Cassez ensuite le code exprès et lisez le message du compilateur.

Leçon terminée ?

Marquez-la comme apprise pour suivre votre progression.

Suivante : Pointers →

S'entraîner avec un défi

Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.

Tous les défis