TGViewer
Thank Go! Thank Go! @thank_go · 3.32K subscribers
Post #272 2.47K
Метод-выражение

Все, конечно, знают, что такое метод структуры:

type counter struct {
val uint
}

func (c *counter) inc() {
c.val++
}


Но не все знают, что метод реализован как обычная функция, у которой первым параметром идет значение получателя (или указатель на него):

// реализованы одинаково
func (c *counter) inc()
func inc(c *counter)


На практике это означает, что вы можете использовать метод как функцию:

inc := (*counter).inc
c := new(counter)
inc(c)
inc(c)
inc(c)
println(c.val)
// 3


Называется такое чудо «метод-выражение» (method expression).

P.S. А бывает еще метод-значение — это более причудливый зверь, замыкание на получателе.
  • 😱 12
  • ❤ 7
  • 👍 6
  • 😁 2
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 →