Это ошибка, потому что ++
и --
в Go являются операторами, а не выражениями: Spec: IncDec Statements (и операторы не имеют результатов, которые будут возвращены).
Для рассуждения см Go FAQ: Why are ++ and -- statements and not expressions? And why postfix, not prefix?
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. As for postfix vs. prefix, either would work fine but the postfix version is more traditional; insistence on prefix arose with the STL, a library for a language whose name contains, ironically, a postfix increment.
Таким образом, код, который вы написали можно записать только как:
func increment() int {
x++
return x
}
И вы должны назвать его, не проходя ничего:
fmt.Println(increment())
Обратите внимание, что у нас возникнет соблазн по-прежнему пытаться записать его в одной строке с помощью assi gnment, например .:
func increment() int {
return x += 1 // Compile-time error!
}
Но это также не работает в Go, потому что assignment также заявление, и, таким образом, вы получите ошибку компиляции:
syntax error: unexpected += at end of statement