Looking into the spec: https://go.dev/ref/spec#Return_statements ReturnStmt = "return" [ ExpressionList ] . ExpressionList = Expression { "," Expression } . ... no () here
https://go.dev/ref/spec#Function_types FunctionType = "func" Signature . Signature = Parameters [ Result ] . Result = *Parameters | Type* . Parameters = *"("* [ ParameterList [ "," ] ] *")"* . ParameterList = ParameterDecl { "," ParameterDecl } . ParameterDecl = [ IdentifierList ] [ "..." ] Type . ... a *Type* does not need () but *Parameters* needs them. But now I am puzzled. I can actually omit the variable name for the arguments: https://play.golang.com/p/g4Sz8rh06QW. This seems to be useless, but it is actually allowed, right? Am Mi., 1. Feb. 2023 um 17:04 Uhr schrieb Raphael Clancy < raphael.cla...@gmail.com>: > 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 > <https://groups.google.com/d/msgid/golang-nuts/68e7ec15-5b55-4d72-b12d-fa9bcab282edn%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/CALWqRZrEg0GremjRjwVWMKPLPWyTOkpf5Ev0-x%2BGmkvU_rPs_Q%40mail.gmail.com.