日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

使用 Python 5 年后,我转向了Go

發布時間:2023/12/31 python 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 Python 5 年后,我转向了Go 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我喜歡Python,在過去的五年里,它一直是我的首選語言。Python非常友好且易于學習,迄今仍然超級有效。

幾乎可以用它來做任何事情 – 從創建簡單的腳本,Web開發,到數據可視化以及機器學習。

但隨著Go日趨成熟,強大的用戶群,事實上越來越多的公司在成功進行基準測試后決定轉向Go,驅使我閱讀了大量Go相關的知識,思考如何將其添加到我的工具集以便在工作中應用它的好處。

這篇文章不會討論哪種編程語言更好 – Python或Go,網絡上有很多關于這個主題的帖子和比較,在我看來區別在很大程度上取決于用例。

在這篇文章中,我將告訴你我從Python到Go的旅程,并提供一些技巧,讓你了解一些幫助我在這次旅程中取得成功的資源,然后現場講述這個故事。

正文

遇到的主要差異

自然,作為第一步,我瀏覽了令人驚嘆的官方“?Tour Of Go?”,這肯定給了我關于Go語法的強大基礎知識。

為了加強這些知識,我閱讀了Go for Python Programmers這本電子書,使我能夠繼續下一步,我認為這是最具教育意義的嘗試和失敗。

我使用了以前在Python中常用的函數,如JSON序列化或HTTP調用,并嘗試在Go中編寫它們。

通過這樣在Go中應用Python中的類似概念,并且仍然保持語言的靜態特性,我遇到了Go和Python之間的一些關鍵差異。

項目布局

首先,Python通常不需要特定的目錄層次結構,反之,Go則需要。

Go使用“標準”布局,這讓它比Python稍微復雜一點,帶來了更多工作,但好處是結構良好的代碼庫,它鼓勵模塊化代碼,在項目規模擴大時能保持有序。

官方的文章“?如何編寫Go代碼?”有一個章節清晰地解釋了如何構建工作區。

靜態和強類型

Go是一種靜態類型的語言,由于大家習慣使用Python或Ruby等動態類型語言,因此初期會感到不太舒服。

毫無疑問,動態語言更容易出錯,并且在輸入的驗證上需要花費更多精力來防止常見語法或解析錯誤。想想計算兩個整數之和的某函數,實際上并不能保證用戶在使用它時不會將一個字符串傳遞給函數 – 這會導致一個TypeError。

這種情況不會發生在Go中,因為需要聲明每個變量的類型,函數可以獲得哪種類型的變量,以及函數將返回哪種類型的變量。

起初它有點煩人,感覺讓編碼速度慢了很多,但是通過短暫的Go學習和編寫后,你會真正地習慣去用它,并發現實際上它能節省時間、讓代碼更健壯。

本機并發

Go利用goroutines和channels支持本機并發,現在真的很方便。

首先,channels的概念可能有點小麻煩,并且很容易被當成某種數據結構或排隊的實現。其實了解下來這些概念更加直白,可以真正享受它們帶來的價值,并進行充分的利用。

Ivan Daniluk對goroutines和channels進行了簡單的可視化:

package mainfunc main() { // create new channel of type int ch := make(chan int)// start new anonymous goroutine go func() { // send 42 to channel ch \u0026lt;- 42 }() // read from channel \u0026lt;-ch}

更多相關示例,請查看goutoutines,channels和select語句的Hootsuite現實生活實現,或ArdanLabs很棒的解釋。

使用JSON

在Go里面,不再使用json.loads()。在Python中,反序列化JSON對象非常簡單,只需使用json.loads即可!但在Go中,作為一種靜態類型語言,這種簡單的操作可能會更棘手。

在Go中,可以將JSON解析為一種預定義結構。任何不適合該結構的字段都將被忽略,這是一個好事,可以把它當成雙方之間的預定義協議。不會需要對JSON中收到的數據感到“驚訝”,JSON字段和類型需要雙方“同意”。

{ “first”:“Elad”, “last”:“Leev”, “location”:“IL”, “id”:“93” }

type AccountData struct { First string`json:“first”` Last string`json:“last”` Location string`json:“location”` ID string`json:“id”` }

當然,仍然可以在沒有結構的情況下反序列化JSON,但是如果可能的話應該避免這樣做,保持語言的靜態性質總是更好的選擇。

為了更好地理解Go中如何編寫JSON,可以查看這篇文章,或“?Go By Example?”,這是可以找到的作為備忘單的最終資源。
如果太懶而不想把JSON轉換成Go結構?沒問題 –??這個工具可以幫你。

清潔代碼

Go編譯器始終盡力保持代碼的清潔,將未使用的變量視為編譯錯誤。而且,Go采用了獨特的方法讓計算機能處理大多數格式問題。在保存或編譯時Go會運行gofmt的程序,它會處理大多數的格式問題。

如果不關心其中的一個變量?沒問題!只需使用 _(下劃線)并將其分配給空標識符即可。

包含Go的格式信息的必讀文檔是“?Effective Go”。

找到合適的庫和框架
我真的習慣了Python框架和庫,如Flask,Jinja2,Requests甚至Kazoo,我真的很擔心找不到適合Go的。但是可以猜到,Go這個偉大的社區擁有自己獨特的庫,甚至可以讓你完全忘記舊的喜好是什么。

以下是一些個人偏好 :

Python Requests =\u0026gt;net/http
內置的net/http提供了HTTP客戶端和服務器,實現得非常棒且非常易用性好。

Flask + Jinja2 =\u0026gt; Gin?
Gin是一個HTTP Web框架,具有非常簡單的API – 路徑參數,上傳文件,分組路由(/api/v1?,/api/v2),自定義日志格式,提供靜態文件,HTML渲染,真正強大的自定義中間件。這里提供了benchmark參考。

CLI Creation =\u0026gt; Cobra?
Cobra庫可用來創建功能強大的CLI應用,還提供了生成應用和命令文件的程序。許多廣泛使用的Go項目都是使用Cobra構建的,包括Kubernetes,etcd和OpenShift。

強烈推薦的一些其他的庫是:Viper,Gonfig和一個很棒的列表 –??Awsome-Go。

其他資源

在我的Go之旅中,下面是一些起到了極大幫助的資源:

[1]?Francesc Campoy??– 一定要看看他的YouTube頻道和GitHub個人資料。Francesc還組織了一些偉大的研討會 -?-?Go Tooling in Action和Web Applications Workshop。
[2]?GopherCon視頻
[3]?Go Web Examples
[4]?幾個Twitter賬戶:Golang Weekly,Gopher Academy,Golang News。

總結

作為一名五年狂熱的Python用戶,我擔心過渡到Go會很痛苦。但我真的很興奮,看到有一個真正強大的社區,貢獻率和維護都很優秀的資源,可以幫助大家順利過渡到Go。Go是當今發展最快的編程語言之一,希望Google能夠好好管理,讓Go成為編寫云應用和基礎架構的首選語言。

目前對Go來說是一個激動人心的時刻,鼓勵大家都來學習并成為Gophers!

原文鏈接:https://medium.com/appsflyer/my-journey-from-python-to-go-3859783c6b3c

總結

以上是生活随笔為你收集整理的使用 Python 5 年后,我转向了Go的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。