有沒有什麼東西是 Go 可以做但 Python 做不到的?
12-28
從語言定位來講,go是快開發效率達到動態語言標準,運行效率接近C。
從開發效率或功能上,go應該優勢不大。說點其他的:
1、運行效率比python高。這是很多python程序員轉go的原因之一
2、並發支持的更好。語言先天支持和後天支持,這和容貌天生和後期整容的區別。
3、部署方便。 不需要外部環境及複雜的配置
4、後期維護方便。
靜態編譯本身就剔除了很多後期隱含的問題。
語言設計上,為了考慮後期維護,go甚至犧牲了一些開發效率。
消滅代碼方言,推行普通話(別考慮「{」放哪裡的問題了,專心你的代碼吧),包括統一的gofmt.
............................................................
go是一門實用的工程語言,特點是簡單高效。每個特性都考慮了大量的取捨。
不會,一樣能做到,python的優勢在於,語法接近偽代碼,寫一些原形,演算法的時候非常簡單,其龐大的標準庫,成熟的介面能讓你很快完成開發。而且python標準庫的優化程度也比較高。有些演算法,例如string的find,自己用c寫寫不好還真不一定比python快。
而go的話,主要價值是在它的思想比較符合當下潮流(並發),從其根本設計上對I/O並發模型簡化,使你用go寫出來的程序不會比用c寫的遜色多少(甚至比一些沒有優化的實現好多了!)。
所以,兩者各有好處。硬是要說,要選哪個語言,我只能說看你哪個熟,還有看你用在什麼業務的實現上。
單機1.2G/秒的HTTP API輸出:http://www.slideshare.net/wuvist1/python-to-go 第九頁。
沒有,二者圖靈等價。區別在於有些事情 Go 做起來很容易、Python 做起來相對麻煩,比如高並發+阻塞的伺服器;另外一些事情則剛好相反。
在語言層面上,Go 比多數傳統語言多出來的無非是對 CSP 的支持(channel / go routine),但對於 Python 來說,stackless、Gevent 等等框架都提供了 CSP、Actor 等不同範式的實現。
除了這一點之外,Go 的優勢就在於最後結果可以靜態編譯方便部署了。要說「能做什麼事」的話,Go 的 package 比 Python 少得多,只有 Python 能做 Go 暫時做不到 / 不好做 / 需要從頭開始的,哪有反過來的例子。
------- 匿名不能評論真蛋疼的分割線 ------
p.s. 樓上 @譚磊 把 system programming 當作 programming an operating system 了吧,呵呵。
要吹集群上的操作系統,只有 Erlang 正兒八經是大致能靠邊的。Go 那個簡單到爆的 RR 調度器和集成度為 0 的跨主機邊界調度和通信,趁早少提分散式了。
------ 分 II ------@唐生 說嵌入 C 代碼,Cython 即可,非常方便。「輕量級進程」純屬扯淡,用戶態調度(到 1.2 為止還是 RR,完全沒有搶佔式)體而已,Python 的 eventlet,C/C++ 直接用 Win32 Fiber / Linux Pth,Lua 就不說了,除了 Java 主流語言基本誰家都有。
類型安全
編譯到native code
搶佔式調度的輕量級進程
自動格式化源代碼
直接包含c代碼
試舉一個例子,GO本意是設計出來編寫下一代操作系統的,一種完全意義上的並行,集群上的操作系統,是一種操作系統級別的語言;python無法編寫操作系統。
=====================
但是,樓主似乎走入了一個誤區,評價語言的優劣其實沒有太大的意義。因為各個語言有自己的特色,好鋼用在刀刃上。讓每一門語言做好自己最擅長的事情就好。比如python做一些教學,快速開發,原型開發;GO做伺服器開發,網遊等。
=====================
如何做好自己最擅長的?
這是另外的一個問題了,有機會再寫吧。
推薦閱讀:
※如何理解 Python 的 Descriptor?
※如何優化 Python 爬蟲的速度?
※為什麼網路爬蟲好難,涉及到的知識我不會?
※做python爬蟲需要會web後端嗎,不會的話能做嗎?
※python3爬蟲中文亂碼問題求解?(beautifulsoup4)