Menu
Coddy logo textTech

Определение методов структур

Часть раздела Объектно-ориентированное программирование путешествия по GO на Coddy — урок 7 из 107.

Методы в Go — это функции со специальным аргументом receiver, который связывает функцию с типом структуры (struct).

Синтаксис метода

func (receiverName StructType) MethodName() ReturnType {
    // тело метода
}

Определите структуру с методами

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)
}

Методы с параметрами

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

Вызов методов

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

Получатель (r Rectangle) позволяет вам обращаться к полям структуры внутри метода, используя переменную получателя r. Методы могут вызывать другие методы той же структуры.

challenge icon

Задание

Средне

Добавьте три метода к структуре Circle:

  • Area — возвращает math.Pi * radius * radius
  • Circumference — возвращает 2 * math.Pi * radius
  • Describe — возвращает строку: "Circle with radius X.XX"

Шпаргалка

Методы в Go — это функции со специальным аргументом-получателем (receiver), который связывает функцию с типом структуры.

Синтаксис метода:

func (receiverName StructType) MethodName() ReturnType {
    // тело метода
}

Пример со структурой и методами:

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)
}

Методы могут принимать параметры:

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

Вызов методов:

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

Получатель позволяет обращаться к полям структуры внутри метода. Методы могут вызывать другие методы той же структуры.

Попробуйте сами

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 iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование