標籤:

Go語言的核心特性有那些?

Goroutine

非侵入式介面

panic/recover和多返回值

垃圾回收

…(沒有然後?)

鄙人淺陋,初窺山門,忘前輩不吝賜教。


沒有很多特性其實也是很牛的特性


Go 語言在工程上有很多特點,比起 C/C++ 那種超級麻煩的編譯配置,和運行環境的配置,簡直是太舒服了。C/C++ 一個共享庫,本來運行的好好的,挪一個地方,一連串錯誤。

但在語法上,甚至連C的支持的東西都被砍掉了。比喻說枚舉,宏。再者 Go 語言的指針也很詭異,C 那套指針操作,放到 Go 語言里完全行不通。

有時候,C 語言的某一段代碼,只要稍微改一改就能在 C++里運行,Go 語言這種 Better C ,行不通。

再者,Go 語言的錯誤處理的麻煩程度甚至超過 C ,C 可以寫一個宏,錯誤直接 goto 到某塊代碼,集體抽象的處理錯誤。雖然 Go 語言也支持 goto,但同樣很詭異。

Go 語言最讓人稱道的是輕線程,非同步,但開發多核的性能是件非常繁雜的事,即便 Erlang 也是2007 年(記不太清楚)才真正從內核級別支持多核。再者 Java 的垃圾回收(某些情況下),會直接把 128 核的伺服器的性能,降到 1 核。難道 Go的垃圾回收比Java更牛逼?而且 go function 啟動一條線程,沒辦法停止它,也不知道它什麼時候停止。

接觸了一段時間 Go,想說的是,千萬別把這語言當做入門語言,或者主攻的語言。要攻計算機科學,C/C++ 會夯實編程基礎 (資源很多,懂得人也多,相關的學術論文也一大堆),而且容易向其他語言遷移。再者,也很容易跨平台。

但 Go 語言可以作為一種不錯的工具,比如說,要快速搞個什麼網路伺服器,它自帶的標準庫,已經準備好了大多數組件,而且性能也不會比其他語言差多少。

但關鍵程序或者作為一門入門的學習語言,真的不建議。(比如說,嵌入式,想要從 CPU 指令那個層級優化程序,要對內存進行嚴格控制,要精準的可控的利用多核的性能)


最初學go是因為有篇文章介紹:用go容易寫出正確的代碼,不僅僅是編譯通過,而是它本身就是正確的。

現在寫的go代碼越多,越覺得這話有道理。正是一些飽受外界批評的東西保證了這些


真正撓到我癢處的:

1. goroutine

2. 沒有亂七八糟的特性


Interface

Goroutine channel


推薦閱讀:

Go語言在Linux中後台運行的問題?
如何看待Phoenix用40核128G內存的機器只能同時保持僅僅200萬WebSocket連接?
GoLang不需要Rakefile/Makefile,是如何實現交叉編譯的?如在X86上生成MIPS的可執行。
作為一名WEB工程師從長遠的角度來講 哪幾種語言 更值得深入學習?
如何理解 Golang 中「不要通過共享內存來通信,而應該通過通信來共享內存」?

TAG:Go語言 |