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
,f
is 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