电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python和go語言的區別是什么

瀏覽:83日期:2022-07-16 18:35:42

背景

工作中的主力語言是Python,今年要搞性能測試的工具,由于GIL鎖的原因,Python的性能實在是慘淡,需要學一門性能高的語言來生成性能測試的壓力端。因此我把目光放在了現在的新秀Go。經過一段時間的學習,也寫了一個小工具,記一下這兩個語言的區別。

需求

工具是一個小爬蟲,用來爬某網站的某個產品的迭代記錄,實現邏輯就是運行腳本后,使用者從命令行輸入某些元素(產品ID等)后,腳本導出一個Excel文件出來。

最初的版本是用Python寫的,30行代碼不到就搞定了。這次用Go重寫,代碼量在110行左右。

接受輸入

第一步就是接受命令行的輸入內容,工具要給非技術人員用的,弄一個CLI不太合適,要的效果就是一行一行的輸入內容,用Python實現起來非常容易,像這樣:

app_id = raw_input(’請輸入app_id: ’)app_analysis = raw_input(’請輸入analysis: ’)

執行后就是一行一行的往下走,但是用Go就有點蛋疼了,完整的代碼如下:

func getPara() (string, string) { var i = 0 var appId, analysis string fmt.Print('請輸入appId:') scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { text := scanner.Text() if i == 0 { appId = text fmt.Print('請輸入analysis:') } else if i == 1 { analysis = text fmt.Print('程序初始化數據完畢。。。。請按任意鍵繼續') } else { break } i++ } return appId, analysis}

Go要實現CLI很方便,但是涉及到這種一行一行的輸入,要一直監聽Scan(),所以就有了上面蛋疼的循環處理,而且在必須要先打印信息,再來監聽內容,總體的寫的過程很惡心,也許是沒有找到更好的方法吧,實在是太逆天了。

發送請求

在發送請求方便,兩種語言倒是差別不太大,至少我寫的Get請求是這樣的。

Pythonparams = { 'analysis': app_analysis, 'appid': app_id, 'country': ’cn’ }r = requests.get(url, params)

Goq := req.URL.Query()q.Add('appid', appId)q.Add('analysis', analysis)q.Add('country', 'cn')req.URL.RawQuery = q.Encode()var resp *http.Responseresp, _ = http.DefaultClient.Do(req)

返回結果處理

在返回結果的處理上,Python的處理方式簡直是太友好了,直接調用json就處理了。

result = r.json()

但是Go就有點蛋疼了,由于是靜態語言,所以解包數據的時候需要先定義數據格式,比如返回的內容必須要先做如下的結構定義:

type ResultInfo struct { Code int Msg string Version []VersionInfo}type VersionInfo struct { Version string `json:'version'` ReleaseTime string `json:'release_time'` ReleaseNote string `json:'release_note'` AppName string `json:'app_name'` SubTitle string `json:'subtitle'`}

第一個ResultInfo是返回的數據,其中的Version也是一個數組對象,所以還要再定義一個數組對象,這樣才能調用方法來解包處理。

body, _ := ioutil.ReadAll(resp.Body)var rst = ResultInfo{}if err := json.Unmarshal(body, &rst); err != nil { fmt.Println(err)}

寫數據到Excel

這部分調用的都是第三方庫,所以沒什么可比性,代碼的實現完全依賴于第三方包。

無所不在的err != nil

Go的異常捕獲機制跟Python或者Java都不一樣,Python的異常捕獲使用的是try,except來包裹代碼塊,而Go用的是一個error對象,所以所有的Go代碼都會充斥著大量的

if err != nil { return nil, err }

這種鬼東西,這種異常機制在閱讀代碼的時候,非常惡心,極大的影響了閱讀體驗。

吐槽完后

基本上從書寫代碼的過程來看,Python的編碼效率比Go高出了很多很多,Go號稱語法靈活,可以極大的提高編碼效率,實際上并沒有,受限于靜態語言,相比于Python這種動態語言來說,編碼效率的差距還是非常大的。只能說比其他靜態語言編碼效率高。

但是?。。?/p>

Go的效率比Python高了太多。舉個例子,有一個計算斐波那契數的算法,Go的實現如下:func main() { const n = 40 starttime := time.Now() fibN := fib(n) endtime := time.Now() cost_time := endtime.Sub(starttime) fmt.Println(cost_time) fmt.Printf('rFibonacci(%d) = %dn', n, fibN)}func fib(x int) int { if x < 2 { return x } return fib(x-1) + fib(x-2)}

很簡單的一個遞歸,當N為40的時候,Go花了大概1秒左右的時間,執行結果如下:

876.838ms(消耗時間)Fibonacci(40) = 102334155

我們換成Python

def fib(x): if x<2: return x return fib(x-1)+fib(x-2)if __name__ == ’__main__’: import time begin = time.time() print fib(40) end = time.time() print end-begin

一樣的執行邏輯,執行的結果卻是:

10233415552.8657081127(消耗時間)

WTF!!! 用Go來處理效率是Python的50倍以上。

還沒完,工具寫完了總是要給人用的吧,Python寫完之后,如果給一個非技術人員使用,那么。。。

使用者:要怎么用?我:你裝一下Python,然后配好環境變量,順便把requests庫和xlwt庫也裝一下。我:要裝這兩個庫你要先裝一下pip。使用者:黑人問號臉!?。。。?p>如果你用Go來寫,打包完發過去就行了

使用者:要怎么用?我:你雙擊一下,讓你輸入什么就輸入什么

如果使用者是用Windows系統,那也沒問題,

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build xxx.go

直接打包成exe文件

知識點擴展:

什么是Python?

Python是一種功能強大的高級編程語言,主要用于科學和工程計算。它是一種高效的語言,優雅務實,簡單而強大,適合新手和專業人士的編程。

Python支持多種編程范例,并提出了一個大型標準庫,包括面向對象,命令式,功能性和程序性。

Go是什么?

Go是一種通用編程語言,由Google設計;它借鑒了許多其他許多好主意語言,同時避免導致復雜性和不可靠代碼的功能。

Go支持多范式,如程序,功能和并發。它的語法傳統上來自C語言,但它已經做了很多修改,以改進簡單性和安全性等功能。

到此這篇關于python和go語言的區別是什么的文章就介紹到這了,更多相關go語言和python有什么區別內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 浇钢砖,流钢砖_厂家价低-淄博恒森耐火材料有限公司 | 土壤肥料养分速测仪_测土配方施肥仪_土壤养分检测仪-杭州鸣辉科技有限公司 | 智能气瓶柜(大型气瓶储存柜)百科| 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 岸电电源-60HZ变频电源-大功率变频电源-济南诚雅电子科技有限公司 | 哈尔滨京科脑康神经内科医院-哈尔滨治疗头痛医院-哈尔滨治疗癫痫康复医院 | 分子精馏/精馏设备生产厂家-分子蒸馏工艺实验-新诺舜尧(天津)化工设备有限公司 | 电动打包机_气动打包机_钢带捆扎机_废纸打包机_手动捆扎机 | 飞歌臭氧发生器厂家_水处理臭氧发生器_十大臭氧消毒机品牌 | 政府回应:200块在义乌小巷能买到爱情吗?——揭秘打工族省钱约会的生存智慧 | 清管器,管道清管器,聚氨酯发泡球,清管球 - 承德嘉拓设备 | 密度电子天平-内校-外校电子天平-沈阳龙腾电子有限公司 | 高硼硅玻璃|水位计玻璃板|光学三棱镜-邯郸奥维玻璃科技有限公司 高温高压釜(氢化反应釜)百科 | 捷码低代码平台 - 3D数字孪生_大数据可视化开发平台「免费体验」 | 低温柔性试验仪-土工布淤堵-沥青车辙试验仪-莱博特(天津)试验机有限公司 | 上海防爆真空干燥箱-上海防爆冷库-上海防爆冷柜?-上海浦下防爆设备厂家? | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 定制异形重型钢格栅板/钢格板_定做踏步板/排水沟盖板_钢格栅板批发厂家-河北圣墨金属制品有限公司 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | 安徽千住锡膏_安徽阿尔法锡膏锡条_安徽唯特偶锡膏_卡夫特胶水-芜湖荣亮电子科技有限公司 | 行业分析:提及郑州火车站附近真有 特殊按摩 ?2025实地踩坑指南 新手如何避坑不踩雷 | 山楂片_雪花_迷你山楂片_山楂条饼厂家-青州市丰源食品厂 | 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 | 土壤水分自动监测站-SM150便携式土壤水分仪-铭奥仪器 | 杭州网络公司_百度SEO优化-外贸网络推广_抖音小程序开发-杭州乐软科技有限公司 | 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 全自动真空上料机_粉末真空上料机_气动真空上料机-南京奥威环保科技设备有限公司 | 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | SMC-ASCO-CKD气缸-FESTO-MAC电磁阀-上海天筹自动化设备官网 | 一体化污水处理设备_生活污水处理设备_全自动加药装置厂家-明基环保 | 球盟会·(中国)官方网站 | 骨龄仪_骨龄检测仪_儿童骨龄测试仪_品牌生产厂家【品源医疗】 | 低气压试验箱_高低温低气压试验箱_低气压实验箱 |林频试验设备品牌 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 郑州水质检测中心_井水检测_河南废气检测_河南中环嘉创检测 | 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 通信天线厂家_室分八木天线_对数周期天线_天线加工厂_林创天线源头厂家 |