当前位置: 首页 > 后端技术 > PHP

为什么Go不支持前缀自增运算符?

时间:2023-03-29 17:17:03 PHP

大家好,我是炸鱼。习惯性比较和类比学习是每个人在掌握新技能时都会习惯性使用的相关操作。在Go这样比较有味道的编程语言中,有一个细节是大家很好奇的。事实上,Go只支持后自增/自减。今天,我将与您讨论原因。语法是基本的Go自增,非常简单。直接看代码:a:=1a++fmt.Println(a)输出结果:2如果答案输出结果错误,建议右转语法。接下来再看几个其他的例子,看是否符合你预期的运行结果。例1,代码如下:funcmain(){a:=1b:=a++fmt.Println(b)}输出结果:#command-line-arguments./main.go:9:8:syntaxerror:unexpected++atendofstatement例子2,代码如下:funcmain(){a:=1++afmt.Println(a)}outputresult:#command-line-arguments./main.go:9:2:syntaxerror:unexpected++,expecting}你会发现这两个例子,在其他常用语言中都是正常的。但是它在Go中运行错误?原因是Go的设计:没有支持前缀自增自减的运算语句,也就是不允许++a。运算符++和--只能作为语句使用,不能作为表达式赋值给其他变量。请参见以下示例:在语句中,++是可以的。赋值=中不允许使用++。那为什么不支持呢?从本质上讲,Go的设计者是为了让代码更具可读性,无需担心求值顺序。单从程序来看,是否区分自增前缀和自增后缀,运行结果是一样的。但是一旦引入,就会增加程序员出错的可能性,经常会让人一头雾水,偶尔也会有人把它做成面试题来考验应聘者。很明显,不支持前缀和赋值,++和--只是作为语句来提高Go代码的可读性,简化意义重大。总结今天的文章,我们对Go语法设计中++和--的细节进行了探索和讨论。其实a++,或者--a,或者更复杂的混合表达,只会让后来的小伙伴在面试或者写作的时候迷惑。在围棋工程化的道路上,不能带来太大的收益,自然就被带走了。你有没有被各种奇怪的前缀、后缀、组合搞得一头雾水?文章持续更新中。可以微信搜索【脑补炸鱼】阅读。本文已收录在GitHubgithub.com/eddycjy/blog中。学习Go语言可以看Go学习地图和路线。欢迎星星提醒。Go书系列Go语言入门系列:初探Go项目实战Go语言编程之旅:深入使用Go做项目Go语言设计哲学:理解Go的Why与设计思维Go语言进阶之旅:更进一步Go源代码Go你来自Google,Go:我不是。为什么Go有两种声明变量的方式,有什么区别,哪种更好?参考GoFAQ为什么go语言的语法是这样设计的?go语言的++操作。没有自增操作?