golang - 为什么++和 - 不能用于表达式?

时间:2014-05-27 03:33:04

标签: go

我们认为在其他语言中理所当然并且几乎期望它在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++)))
}

3 个答案:

答案 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