Go101 发布的一条 twitter。以下代码是否能正常运行,结果是? 下面代码输出什么?

package main

func main() {
    v := new(int)
    *v = 2
    println(5/+-*v)
}

参考答案及解析:B。

Go 中有如下几个一元运算符

unary_op = "+" | "-" | "!" | "^" | "*" | "&" | "<-" .

因此会先计算 5/+-*v 又因为规范

对于整数操作数,一元运算符 + , - 和 ^ 有如下定义:(省略了 ^ 的解释) +x      是 0 + x -x 取其负值 是 0 - x

因此转化后 5 / [0+(0-*v)] 、 5 / -2
又因为强制类型转换 -2.5 成了 -2