大家好,我是煎鱼。
习惯性对比,类比学习,是大家掌握新技能时会习惯性的关联操作。像 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 在设计上:
- 没有支持前缀编程语言学哪个好自增自减的运算语句,也就是不允许 ++a。
- 运算面试技巧符 ++ 和 — 只能作为一个语句来使用,不可以作为表达式被赋值给其它的变量使用。
参照以编程语言有哪些下例子:
- 在语句中,++Go 是可以的。
- 在赋值 = 中 ++ 是不可以。
那为什么就不支持了呢?本质上 Go 的设计者是为了让代码拥有更好的可读性,也不需要纠结求值顺序了。
单从程序上来看,区分前缀自增,还是后缀自增,运行结果上都是一样的。但一旦引入,会加大程序员的犯错可能性,经常会有人混淆,偶尔还会有人搞成面试题来考考应聘者。
显然,不支持前缀和赋值,++、– 仅作为一个语句能够在 Go 代码上起到可读性提高的作用,简化意义重大。
总结
今天这篇文章,我们github是什么针对 Go 语法设计中github中文官网网页的 ++、– 这个细节进行了摸索和讨论。实际上 a++,还工龄越长退休金越多吗是 –a,面试自我介绍简单大方又或是更加复杂的混合表达式,更多的只能在面试或编写时迷惑后来的小伙伴。
在 Go 工程化的道路上并不能带来过多的收益,所以自然也就被拿掉了。
你有没有试过被各种奇怪的前缀、后缀、混合迷惑过呢?
文章持面试技巧和话术大全续更新,可以程序员客栈微信搜【脑子进煎鱼了】阅读,本文 GitHu程序员b github.com/eddycjy/blo面试自我介绍一分钟… 已收录,学习 Go 语言可以看 Go 学习地图和路线,欢迎 Star编程语言的种类 催更。
Go 图书系列
- Go 语言入门系列:初探 Go 项目实战龚俊
- Go 语言编程之旅:深入用 Go 做项目
- Go 语言设计哲学:了解 Go 的为什么和设计思考
- Go 语言进阶之旅:进一步深入 Go 源码
推荐阅读
- 网友:Go 你是 Goog编程语言自学难度排名le 的,Go:我不是。github永久回家地址
- 为什么 Go 有两种声明变量的方式,有什么区别,哪种好?
参考
- Go FAQ
- 为什么go语言面试自我介绍一分钟语法要这样设计呢?
- go 语言的 ++ 操作。没有自增操作?