乐趣区

关于php:Go-为什么不支持前缀自增运算符

大家好,我是煎鱼。

习惯性比照,类比学习,是大家把握新技能时会习惯性的关联操作。像 Go 这种比拟有滋味的编程语言,其有一个细节也是大家很好奇的。

其实 Go 只反对后自增 / 自减,明天煎鱼和大家一起钻研为什么。

语法

根本的 Go 自增,非常简单。间接见代码:

a := 1
a++

fmt.Println(a)

输入后果:

2

如果答复输入后果错了,倡议右拐语法了。接下来看看其余几个例子,与你料想的运行后果是否统一。

例子 1,代码如下:

func main() {
    a := 1
    b := a++
    fmt.Println(b)
}

输入的后果:

# command-line-arguments
./main.go:9:8: syntax error: unexpected ++ at end of statement

例子 2,代码如下:

func main() {
    a := 1
    ++a
    fmt.Println(a)
}

输入的后果:

# command-line-arguments
./main.go:9:2: syntax error: unexpected ++, expecting }

你会发现这两个例子,在其余常见语言中都是失常的。但在 Go 中居然会运行谬误?

起因

Go 在设计上:

  1. 没有反对前缀自增自减的运算语句,也就是不容许 ++a。
  2. 运算符 ++ 和 — 只能作为一个语句来应用,不能够作为表达式被赋值给其它的变量应用。

参照以下例子:

  • 在语句中,++ 是能够的。
  • 在赋值 = 中 ++ 是不能够。

那为什么就不反对了呢?实质上 Go 的设计者是为了让代码领有更好的可读性,也不须要纠结求值程序了。

单从程序上来看,辨别前缀自增,还是后缀自增,运行后果上都是一样的。但一旦引入,会加大程序员的犯错可能性,常常会有人混同,偶然还会有人搞成面试题来考考应聘者。

显然,不反对前缀和赋值,++、– 仅作为一个语句可能在 Go 代码上起到可读性进步的作用,简化意义重大。

总结

明天这篇文章,咱们针对 Go 语法设计中的 ++、– 这个细节进行了摸索和探讨。实际上 a++,还是 –a,又或是更加简单的混合表达式,更多的只能在面试或编写时蛊惑起初的小伙伴。

在 Go 工程化的路线上并不能带来过多的收益,所以天然也就被拿掉了。

你有没有试过被各种奇怪的前缀、后缀、混合蛊惑过呢?

文章继续更新,能够微信搜【脑子进煎鱼了】浏览,本文 GitHub github.com/eddycjy/blog 已收录,学习 Go 语言能够看 Go 学习地图和路线,欢送 Star 催更。

Go 图书系列

  • Go 语言入门系列:初探 Go 我的项目实战
  • Go 语言编程之旅:深刻用 Go 做我的项目
  • Go 语言设计哲学:理解 Go 的为什么和设计思考
  • Go 语言进阶之旅:进一步深刻 Go 源码

举荐浏览

  • 网友:Go 你是 Google 的,Go:我不是。
  • 为什么 Go 有两种申明变量的形式,有什么区别,哪种好?

参考

  • Go FAQ
  • 为什么 go 语言语法要这样设计呢?
  • go 语言的 ++ 操作。没有自增操作?
退出移动版