Group Similar Declarations
Go supports grouping similar declarations.
| Bad | Good |
|---|---|
| ```go import "a" import "b" ``` | ```go import ( "a" "b" ) ``` |
This also applies to constants, variables, and type declarations.
| Bad | Good |
|---|---|
| ```go const a = 1 const b = 2 var a = 1 var b = 2 type Area float64 type Volume float64 ``` | ```go const ( a = 1 b = 2 ) var ( a = 1 b = 2 ) type ( Area float64 Volume float64 ) ``` |
Only group related declarations. Do not group declarations that are unrelated.
| Bad | Good |
|---|---|
| ```go type Operation int const ( Add Operation = iota + 1 Subtract Multiply EnvVar = "MY_ENV" ) ``` | ```go type Operation int const ( Add Operation = iota + 1 Subtract Multiply ) const EnvVar = "MY_ENV" ``` |
Groups are not limited in where they can be used. For example, you can use them inside of functions.
| Bad | Good |
|---|---|
| ```go func f() string { red := color.New(0xff0000) green := color.New(0x00ff00) blue := color.New(0x0000ff) // ... } ``` | ```go func f() string { var ( red = color.New(0xff0000) green = color.New(0x00ff00) blue = color.New(0x0000ff) ) // ... } ``` |
Exception: Variable declarations, particularly inside functions, should be grouped together if declared adjacent to other variables. Do this for variables declared together even if they are unrelated.
| Bad | Good |
|---|---|
| ```go func (c *client) request() { caller := c.name format := "json" timeout := 5*time.Second var err error // ... } ``` | ```go func (c *client) request() { var ( caller = c.name format = "json" timeout = 5*time.Second err error ) // ... } ``` |