Go gotcha: Why doesn't increment (++) and decrement (--) work?

Why doesn't these lines compile:

i := 0
fmt.Println(++i)
fmt.Println(i++)
main.go:9:14: syntax error: unexpected ++, expecting expression
main.go:10:15: syntax error: unexpected ++, expecting comma or )
Answer

In Go increment and decrement operations can’t be used as expressions, only as statements. Also, only the postfix notation is allowed.

The above snippet needs to be written as:

i := 0
i++
fmt.Println(i)
fmt.Println(i)
i++

Without pointer arithmetic, the convenience value of pre- and postfix increment operators drops. By removing them from the expression hierarchy altogether, expression syntax is simplified and the messy issues around order of evaluation of ++ and -- (consider f(i++) and p[i] = q[++i]) are eliminated as well. The simplification is significant. Go FAQ: Why are ++ and – statements and not expressions?

Comments

Be the first to comment!