Unparenthesized results

April 3, 2023

Function types

Parameter and result lists are always parenthesized except that if there is exactly one unnamed result it may be written as an unparenthesized type.

But more directly: Function parameters must always be wrapped in parenthesis. Function reults must be wrapped in parenthesis if there is more than one result, or if the result is named. Further, though not clear from this wording in the spec, if there are no results, no parenthesis are required, even though if there are no parameters, they are still required.

Let’s look at examples.

func() // No parameters, and no results. The (empty) parameter list must still be parenthesized.

func() error // A single, un-named result requires no parentheses.

func() (err error) // Parentheses required because the result is named

func() (int, error) // Parentheses required because of multiple return values

There may be a few times when you don’t see parentheses that could surprise you, because they appear to violate this rule because they contain multiple words. But keep in mind that some some types are expressed using multiple words.

// This function returns a value of type `func() error`
func () func() error

// This function returns a value of type `chan bool`
func() chan bool

Quotes from The Go Programming Language Specification Version of December 15, 2022

Share this