我们认为在其他语言中理所当然并且几乎期望它在go中工作是不行的 - 这样做几乎是如此自然,为什么编译器不满意呢?只是觉得有时候会离开。
增加值的唯一方法是将它放在自己独立的行中吗?
http://play.golang.org/p/_UnpZVSN9n
package main
import "fmt"
import "strconv"
func main() {
a := 1
//Evaluate expression and pass into function - won't work
fmt.Println(strconv.Itoa(a++))
//Braces around a++ also won't work
fmt.Println(strconv.Itoa((a++)))
}
答案 0 :(得分:10)
++
和--
是golang中的语句,而不是表达式
答案 1 :(得分:1)
具体而言,++
和--
是陈述,因为当他们在表达式中时,很难理解评估的顺序。
请考虑以下事项:
// This is not valid Go!
x := 1
x = x++ + x
y := 1
y = ++y + y
您期望x
会是什么?你期望y
会是什么?相比之下,当这是一个陈述时,评估的顺序非常清楚。
答案 2 :(得分:0)
只需澄清一下,表达式中就有=
,:=
或+=
。语句(例如++
和—
)则没有。参见https://stackoverflow.com/a/1720029/12817546。
package main
import "fmt"
var x int
func f(x int) {
x = x + 1 //expression
x++ //statement
fmt.Println(x) //2
}
func main() {
f(x) //expression statement
}
“表达式”通过将运算符和函数应用于操作数来指定值的计算。参见https://golang.org/ref/spec#Expressions。
“声明”控制执行。参见https://golang.org/ref/spec#Statements。
“表达式语句”是出现在语句中的函数和方法调用或接收操作。参见https://golang.org/ref/spec#Expression_statements。