mirror of
https://github.com/golang/go
synced 2024-11-26 11:58:07 -07:00
spec: add example for method value in case of embedded method
So it's clear to the reader that if "M" is a promoted method from embedded field "T", then "x.M" will be expanded to "x.T.M" during the evaluation of the method value. Fixes #47863 Change-Id: Id3b82127a2054584b6842c487f6e15c3102dc9fe Reviewed-on: https://go-review.googlesource.com/c/go/+/344209 Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
f457ecc7f0
commit
aeec6dbfe0
@ -1,6 +1,6 @@
|
||||
<!--{
|
||||
"Title": "The Go Programming Language Specification",
|
||||
"Subtitle": "Version of Jul 26, 2021",
|
||||
"Subtitle": "Version of Aug 23, 2021",
|
||||
"Path": "/ref/spec"
|
||||
}-->
|
||||
|
||||
@ -3000,6 +3000,18 @@ method value; the saved copy is then used as the receiver in any calls,
|
||||
which may be executed later.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
type S struct { *T }
|
||||
type T int
|
||||
func (t T) M() { print(t) }
|
||||
|
||||
t := new(T)
|
||||
s := S{T: t}
|
||||
f := t.M // receiver *t is evaluated and stored in f
|
||||
g := s.M // receiver *(s.T) is evaluated and stored in g
|
||||
*t = 42 // does not affect stored receivers in f and g
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
The type <code>T</code> may be an interface or non-interface type.
|
||||
</p>
|
||||
|
Loading…
Reference in New Issue
Block a user