This is a brief post highlighting a curious aspect of the declaration syntax in Go.
Most Go programmers know that the following of import declarations are equivalent
import "fmt"
import "math/big"
// same as
import (
"fmt"
"math/big"
)
The same applies to const declarations
const FORTYTWO = 42
const TRUE = 1
// same as
const (
FORTYTWO = 42
TRUE = 1
)
But perhaps you didn’t know that the syntax is also valid for type declarations. For example, the following is valid syntax in Go.
type (
B struct{ a, b int }
C interface {
Hello() error
}
)
However because the func declaration has been extended to place methods on types, the following is not valid syntax
func (
main() {
fmt.Println("wowzers")
}
)