TGViewer
Thank Go! Thank Go! @thank_go · 3.33K subscribers
Post #179 3.92K
Метод-значение

Это вы конечно молодцы, что так хорошо знаете возможности языка!

Действительно, метод у значения структуры (или указателя на значение) — это просто функция с конкретным получателем (тем самым значением структуры). Такой метод-значение (method value) можно использовать как обычную функцию — вызывать напрямую или передавать в качестве параметра, например.

Предположим, у нас есть тип-монитор, который умеет периодически проверять доступность сервиса, ведет историю проверок, считает процент доступности и выполняет другие полезные действия.

Монитору совершенно не нужно знать о конкретной реализации сервиса. Достаточно получить в конструкторе функцию-пинг, и дальше вызывать ее:

type Monitor struct {
ping func() error
// ...
}

func NewMonitor(ping func() error) *Monitor {
return &Monitor{ping}
}


И если у нашего сервера есть подходящий по сигнатуре метод:

func (s *Server) Ping() error {
// ...
}


То можно прямо его и передать без всяких оберток:

s := Server{}
m := NewMonitor(s.Ping)


Такие вот элементы функционального программирования в глубоко процедурном языке :)
  • 🤩 15
  • 👍 11
  • 😱 3
More from @thank_go
  1. Sep 26, 2026Шпаргалка по многозадачности Подготовил интерактивную памятку по многозадачности в Go: — Г…
  2. Sep 2, 2026Множественный разврат возврат Сколько значений можно вернуть из функции через multi-return…
  3. Aug 31, 2026Ошибка ошибка ошибка ошибка Это выражение выглядит странновато, но оно полностью корректно…
  4. Aug 30, 2026Post #280
  5. Aug 25, 2026JSON v2 в Go 1.27 Вторая версия json-пакета впервые появилась как экспериментальная в Go 1…
  6. Aug 12, 2026strings.CutLast Из небольших изменений в Go 1.27 я больше всего рад strings.CutLast. Эта ф…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →