Структуры и интерфейсы
Go Methods: Value and Pointer Receivers
Go has no classes. Attach methods to a type and choose the right receiver.
Что вы узнаете
- Methods and receivers
- Value vs pointer receiver
- Constructor functions
Receiver → what the method can do
func (r Rectangle) Area()read a copyfunc (r *Rectangle) Scale(f)change the originalA 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.
Главное
- A value receiver works on a copy.
- A pointer receiver can change the original.
- NewSquare is a normal function used as a constructor.
Пример на Go, который можно запустить
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())
}
area: 12
scaled: 6 x 8 = 48
square: 25Практика
Откройте пример в онлайн-компиляторе, измените значение или добавьте строку и попробуйте предсказать вывод до запуска. Затем намеренно сломайте код и прочитайте сообщение компилятора.
Закончили этот урок?
Отметьте его как изученный, чтобы следить за прогрессом.
Ваш прогресс сохранён в этом браузере Войдите, чтобы он был доступен на всех устройствах.
Попрактикуйтесь на задаче
Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.
- Правила банковского счёта Защитите баланс счёта с помощью правил пополнения и снятия, отклоняя недопустимые операции. Легко
- Distance Between Points Compute the straight-line distance between two points. Легко