From 04a44d2a150328bc5b1cdbb7624dddcf0f958533 Mon Sep 17 00:00:00 2001 From: wdesert Date: Wed, 31 Jul 2024 09:14:59 +0000 Subject: [PATCH] _content/doc/faq: clarify the explanation of method sets I had a small discussion with @ianlancetaylor here: https://groups.google.com/g/golang-nuts/c/uon32LDerjM/m/dvg0mxbwAAAJ?utm_medium=email&utm_source=footer I would like to clarify this entry about method sets a bit because the current explanation is a bit confusing. I believe there is no reason for the Write method of Buffer to use a value receiver. In this case, the sentence about the compiler's ability to implicitly take addresses doesn't make sense. What I believe is implied here is a hypothetical situation where the code from the example is allowed by Go, and then it is noted that this makes no sense as the result would be lost in the caller. Change-Id: Ie4de77364165d59178e2b1e6e1393370e06d1755 GitHub-Last-Rev: 40392d43f0b00087793e75d4b99cfed69ff831d3 GitHub-Pull-Request: golang/website#296 Reviewed-on: https://go-review.googlesource.com/c/website/+/601996 Auto-Submit: Ian Lance Taylor Reviewed-by: Rob Pike Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov --- _content/doc/faq.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/_content/doc/faq.md b/_content/doc/faq.md index 50ccbe37..a3df1c48 100644 --- a/_content/doc/faq.md +++ b/_content/doc/faq.md @@ -1425,19 +1425,17 @@ the language specification.) Even in cases where the compiler could take the address of a value to pass to the method, if the method modifies the value the changes will be lost in the caller. -As an example, if the `Write` method of -[`bytes.Buffer`](/pkg/bytes/#Buffer) -used a value receiver rather than a pointer, -this code: + +As an example, if the code below were valid: ``` var buf bytes.Buffer io.Copy(buf, os.Stdin) ``` -would copy standard input into a *copy* of `buf`, +it would copy standard input into a *copy* of `buf`, not into `buf` itself. -This is almost never the desired behavior. +This is almost never the desired behavior and is therefore disallowed by the language. ### What happens with closures running as goroutines? {#closures_and_goroutines}