This is really helpful! Thank you!

At first I assumed that it was down to 'go fmt' letting you be fairly loose 
with your syntax and that you could omit parentheses where the meaning 
wouldn't be ambiguous.  But on closer examination, there must be something 
else going on because 'return a, b' works fine and 'return (a, b)' 
generates an error. But, both 'func(a string) string {}' and  'func(a 
string) (string){}' work fine.

Maybe it's because 'return' isn't really a function call and has it's own 
syntax?

On Wednesday, February 1, 2023 at 8:13:10 AM UTC-7 
axel.wa...@googlemail.com wrote:

> Good point, didn't think of that
>
> On Wed, Feb 1, 2023, 15:30 p...@morth.org <p...@morth.org> wrote:
>
>> It would actually be ambiguous in the very place they're required.
>>
>> Consider this not completely unreasonable example: 
>> https://go.dev/play/p/OL0uOnPZXju
>>
>> Also, with generics it could be ambiguous in type parameters.
>> To summarize, parentheses are needed around the return types because 
>> otherwise anywhere a list of types is used, it would be ambiguous.
>>
>> Regards,
>> Per Johansson
>>
>> On Tuesday, January 31, 2023 at 8:38:46 PM UTC+1 
>> axel.wa...@googlemail.com wrote:
>>
>>> I'm not sure there really is a "reason", per se. The language could just 
>>> as well have been designed not to require parentheses around the return 
>>> types (at least I see no parsing ambiguity with that, though there might 
>>> be) or designed to require parentheses in the return statement. It probably 
>>> just felt more intuitive and readable to the designers at the time.
>>>
>>> FWIW I find it more interesting that `func() T` requires no parentheses, 
>>> but `func() (S, T)` does.
>>>
>>> On Tue, Jan 31, 2023 at 5:55 PM Raphael Clancy <raphael...@gmail.com> 
>>> wrote:
>>>
>>>> Hey all, I figured it was time to move to a "modern" language and I 
>>>> thought I'd give go a try. So far, I'm really enjoying it. I'm just 
>>>> getting 
>>>> started and I had a question about parentheses. Though, I guess it's 
>>>> really 
>>>> about how go parses lines of code and what counts as a delimiter.
>>>>
>>>> Anyway, in the get started section on error handling 
>>>> <https://go.dev/doc/tutorial/handle-errors>, why are parentheses 
>>>> required around string and error here:
>>>>
>>>> func Hello(name string) (string, error) {...
>>>>
>>>> but not around message and nil here:
>>>>
>>>> return message, nil
>>>>
>>>> I tried searching a bit but I couldn't come up with anything about such 
>>>> a basic topic.
>>>>
>>>> Thanks!
>>>>
>>>> -- 
>>>> 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/b49dc8c2-26ea-46bc-b76a-708a2537207cn%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/golang-nuts/b49dc8c2-26ea-46bc-b76a-708a2537207cn%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...@googlegroups.com.
>>
> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/56d23af2-b3dd-4c59-86d4-d14d56e73a93n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/56d23af2-b3dd-4c59-86d4-d14d56e73a93n%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/68e7ec15-5b55-4d72-b12d-fa9bcab282edn%40googlegroups.com.

Reply via email to