Today we’ll finish our discussoin of method expression from Monday and Tuesday.
Method expressions
…
Function values derived from methods are called with function call syntax; the receiver is provided as the first argument to the call. That is, given
f := T.Mv,fis invoked asf(t, 7)nott.f(7).
We’ve already seen examples of this, the last two days. But to be honest, you’re unlikely to use these types of functions very frequently. What you will likely use a little bit more often is the topic for tomorrow: method values…
… To construct a function that binds the receiver, use a function literal or method value.
But one final note on method expressions:
It is legal to derive a function value from a method of an interface type. The resulting function takes an explicit receiver of that interface type.
For example, given:
type T struct {
a int
}
func (tv T) Mv(a int) int { return 0 } // value receiver
type I interface {
Mv(int) int
}
the expression I.Mv results in a function of the signature func(I, int) int.
Quotes from The Go Programming Language Specification Version of August 2, 2023