Understood! I appreciate all your help.

@Axel Wagner
@Jason Phillips
@Ian Lance Taylor

Thanks again!
Xudong


在2024年7月17日星期三 UTC+8 14:02:07<Axel Wagner> 写道:

> Hi,
>
>> However, I would like to point out that selector rule 3 states:
>>
>> As an exception, if the type of x is a defined pointer type and (*x).f is 
>> a valid selector expression denoting a field (but not a method), then x.f 
>> is shorthand for (**x).f.*
>>
>> The emphasis here is on "defined pointer type." In the code, *s is a 
>> composite pointer literal type, not a defined pointer type. Therefore, I 
>> believe this rule does not apply in this case.
>>
> As I mentioned on slack, the fact that this is not a defined pointer type 
> means that is not the right rule to look at. Instead, you need to look at 
> the first rule in the list.
>
>> Furthermore, in selector rule 1, it only states that "x.f denotes the 
>> field or method." The term "denotes" is somewhat ambiguous and does not 
>> imply implicit pointer indirection.
>>
> I don't think this particular level of language-lawyering is useful. The 
> spec is not a legal document or anything like that and should be read for 
> intent.
> Writing `f().i` is allowed and well-defined, so the goal should be to 
> justify *that* it is correct, not to come up with readings making it 
> incorrect. A gracious reading of the spec here seems pretty clear.
>
>
>> 在2024年7月17日星期三 UTC+8 12:51:48<Ian Lance Taylor> 写道:
>>
>>> On Tue, Jul 16, 2024 at 9:29 PM 王旭东 <wxd...@gmail.com> wrote: 
>>> > 
>>> > Hi, I have a question about "addressable." 
>>> > 
>>> > The following code illustrates my question (see the comments): 
>>> > https://go.dev/play/p/xpiPXuEqh0O?v=gotip 
>>> > 
>>> > 
>>> > 
>>> > I also posted question in the Gopher Slack channel, and @Axel Wagner 
>>> provided a detailed explanation, suggesting that this might be a gap in the 
>>> Go specification. 
>>> > @Jason Phillips recommended that I ask this question in the GitHub 
>>> issues and the golang-nuts mailing list. 
>>> > 
>>> > I really appreciate everyone’s help mentioned, but I still don’t have 
>>> a clear conclusion. 
>>> > 
>>> > To simplify: my question is why the result of myfunReturnPointer() is 
>>> addressable if we strictly follow the specification. 
>>>
>>>
>>> In https://go.dev/ref/spec#Selectors the spec explains that if the 
>>> type of x is a pointer, then the selector expression x.f is shorthand 
>>> for (*x).f. That is the case in your playground example: the 
>>> expression myfunReturnPointer().i is short for 
>>> (*myfunReturnPointer()).i. The pointer indirection 
>>> *myfunReturnPointer() is addressable according to 
>>> https://go.dev/ref/spec#Address_operators. So this is a field 
>>> selector of an addressable struct operand. 
>>>
>>> Ian 
>>>
>> -- 
>>
> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts...@googlegroups.com.
>>
> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/0fb5aa3e-4568-4520-bd42-ff01c1a2bd54n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/0fb5aa3e-4568-4520-bd42-ff01c1a2bd54n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/c4c460a9-cdda-46d1-b5fa-a9dac510a8b7n%40googlegroups.com.

Reply via email to