Go語言為什么不支持前綴自增運算符原理解析
引言
習慣性對比,類比學習,是大家掌握新技能時會習慣性的關(guān)聯(lián)操作。像 Go 這種比較有味道的編程語言,其有一個細節(jié)也是大家很好奇的。
其實 Go 只支持后自增/自減,今天煎魚和大家一起研究為什么。
語法
基本的 Go 自增,非常簡單。直接見代碼:
a := 1 a++ fmt.Println(a)
輸出結(jié)果:
2
如果回答輸出結(jié)果錯了,建議右拐語法了。接下來看看其他幾個例子,與你預(yù)想的運行結(jié)果是否一致。
例子 1,代碼如下:
func main() {
a := 1
b := a++
fmt.Println(b)
}輸出的結(jié)果:
# command-line-arguments
./main.go:9:8: syntax error: unexpected ++ at end of statement
例子 2,代碼如下:
func main() {
a := 1
++a
fmt.Println(a)
}輸出的結(jié)果:
# command-line-arguments
./main.go:9:2: syntax error: unexpected ++, expecting }
你會發(fā)現(xiàn)這兩個例子,在其他常見語言中都是正常的。但在 Go 中竟然會運行錯誤?
原因
Go 在設(shè)計上:
- 沒有支持前綴自增自減的運算語句,也就是不允許 ++a。
- 運算符 ++ 和 -- 只能作為一個語句來使用,不可以作為表達式被賦值給其它的變量使用。
參照以下例子:
- 在語句中,++ 是可以的。
- 在賦值 = 中 ++ 是不可以。
那為什么就不支持了呢?本質(zhì)上 Go 的設(shè)計者是為了讓代碼擁有更好的可讀性,也不需要糾結(jié)求值順序了。
單從程序上來看,區(qū)分前綴自增,還是后綴自增,運行結(jié)果上都是一樣的。但一旦引入,會加大程序員的犯錯可能性,經(jīng)常會有人混淆,偶爾還會有人搞成面試題來考考應(yīng)聘者。
顯然,不支持前綴和賦值,++、-- 僅作為一個語句能夠在 Go 代碼上起到可讀性提高的作用,簡化意義重大。
總結(jié)
今天這篇文章,我們針對 Go 語法設(shè)計中的 ++、-- 這個細節(jié)進行了摸索和討論。實際上 a++,還是 --a,又或是更加復(fù)雜的混合表達式,更多的只能在面試或編寫時迷惑后來的小伙伴。
在 Go 工程化的道路上并不能帶來過多的收益,所以自然也就被拿掉了。
你有沒有試過被各種奇怪的前綴、后綴、混合迷惑過呢?
以上就是Go語言為什么不支持前綴自增運算符原理解析的詳細內(nèi)容,更多關(guān)于Go不支持前綴自增運算符的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
golang通過context控制并發(fā)的應(yīng)用場景實現(xiàn)
這篇文章主要介紹了golang通過context控制并發(fā)的應(yīng)用場景實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-01-01

