新聞中心
相比于Python的40個特性,GO只有31個,可以說Go在語言設計上是相當克制的。比如,它沒有隱式的數(shù)值轉換,沒有構造函數(shù)和析構函數(shù),沒有運算符重載,沒有默認參數(shù),也沒有繼承,沒有泛型,沒有異常,沒有宏,沒有函數(shù)修飾,更沒有線程局部存儲。

但是Go的特點也很鮮明,比如,它擁有協(xié)程、自動垃圾回收、包管理系統(tǒng)、一等公民的函數(shù)、??臻g管理等。
Go作為靜態(tài)類型語言,保證了Go在運行效率、內存用量、類型安全都要強于Python和Erlang。
Go的數(shù)據類型也更加豐富,除了支持表、字典等復雜的數(shù)據結構,還支持指針和接口類型,這是Python和Erlang所沒有的。特別是接口類型特別強大,它提供了管理類型系統(tǒng)的手段。而指針類型提供了管理內存的手段,這讓Go進入底層軟件開發(fā)提供了強有力的支持。
Go在面對對象的特性支持上做了很多反思和取舍,它沒有類、虛函數(shù)、繼承、泛型等特性。Go語言中面向對象編程的核心是組合和方法(function)。組合很類似于C語言的struct結構體的組合方式,方法類似于Java的接口(Interface),但是使用方法上與對象更加解耦,減少了對對象內部的侵入。Erlang則不支持面對對象編程范式,相比而言,Python對面對對象范式的支持最為全面。
在函數(shù)式編程的特性支持上,Erlang作為函數(shù)式語言,支持最為全面。但是基本的函數(shù)式語言特性,如lambda、高階函數(shù)、curry等,三種語言都支持。
控制流的特性支持上,三種語言都差不多。Erlang支持尾遞歸優(yōu)化,這給它在函數(shù)式編程上帶來便利。而Go在通過動態(tài)擴展協(xié)程棧的方式來支持深度遞歸調用。Python則在深度遞歸調用上經常被爆棧。
Go和Erlang的并發(fā)模型都來源于CSP,但是Erlang是基于actor和消息傳遞(mailbox)的并發(fā)實現(xiàn),Go是基于goroutine和管道(channel)的并發(fā)實現(xiàn)。不管Erlang的actor還是Go的goroutine,都滿足協(xié)程的特點:由編程語言實現(xiàn)和調度,切換在用戶態(tài)完成,創(chuàng)建銷毀開銷很小。至于Python,其多線程的切換和調度是基于操作系統(tǒng)實現(xiàn),而且因為GIL的大坑級存在,無法真正做到并行。
分享標題:創(chuàng)新互聯(lián)Python教程:go與python哪個簡單
分享鏈接:http://m.fisionsoft.com.cn/article/djeepos.html


咨詢
建站咨詢
