小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

使用 Python 5 年后,我轉(zhuǎn)向了 Go

 美好生活谷 2019-03-24
使用 Python 5 年后,我轉(zhuǎn)向了 Go

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

幾乎可以用它來做任何事情 – 從創(chuàng)建簡單的腳本,Web 開發(fā),到數(shù)據(jù)可視化以及機(jī)器學(xué)習(xí)。

但隨著 Go 日趨成熟,強(qiáng)大的用戶群,事實(shí)上越來越多的公司在成功進(jìn)行基準(zhǔn)測試后決定轉(zhuǎn)向 Go,驅(qū)使我閱讀了大量 Go 相關(guān)的知識,思考如何將其添加到我的工具集以便在工作中應(yīng)用它的好處。

這篇文章不會(huì)討論哪種編程語言更好 – Python 或 Go,網(wǎng)絡(luò)上有很多關(guān)于這個(gè)主題的帖子和比較,在我看來區(qū)別在很大程度上取決于用例。

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

使用 Python 5 年后,我轉(zhuǎn)向了 Go

正文

遇到的主要差異

自然,作為第一步,我瀏覽了令人驚嘆的官方“ Tour Of Go ”,這肯定給了我關(guān)于 Go 語法的強(qiáng)大基礎(chǔ)知識。

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

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

通過這樣在 Go 中應(yīng)用 Python 中的類似概念,并且仍然保持語言的靜態(tài)特性,我遇到了 Go 和 Python 之間的一些關(guān)鍵差異。

項(xiàng)目布局

首先,Python 通常不需要特定的目錄層次結(jié)構(gòu),反之,Go 則需要。

Go 使用“標(biāo)準(zhǔn)”布局,這讓它比 Python 稍微復(fù)雜一點(diǎn),帶來了更多工作,但好處是結(jié)構(gòu)良好的代碼庫,它鼓勵(lì)模塊化代碼,在項(xiàng)目規(guī)模擴(kuò)大時(shí)能保持有序。

官方的文章“ 如何編寫 Go 代碼 ”有一個(gè)章節(jié)清晰地解釋了如何構(gòu)建工作區(qū)。

靜態(tài)和強(qiáng)類型

Go 是一種靜態(tài)類型的語言,由于大家習(xí)慣使用 Python 或 Ruby 等動(dòng)態(tài)類型語言,因此初期會(huì)感到不太舒服。

毫無疑問,動(dòng)態(tài)語言更容易出錯(cuò),并且在輸入的驗(yàn)證上需要花費(fèi)更多精力來防止常見語法或解析錯(cuò)誤。想想計(jì)算兩個(gè)整數(shù)之和的某函數(shù),實(shí)際上并不能保證用戶在使用它時(shí)不會(huì)將一個(gè)字符串傳遞給函數(shù) – 這會(huì)導(dǎo)致一個(gè) TypeError。

這種情況不會(huì)發(fā)生在 Go 中,因?yàn)樾枰暶髅總€(gè)變量的類型,函數(shù)可以獲得哪種類型的變量,以及函數(shù)將返回哪種類型的變量。

起初它有點(diǎn)煩人,感覺讓編碼速度慢了很多,但是通過短暫的 Go 學(xué)習(xí)和編寫后,你會(huì)真正地習(xí)慣去用它,并發(fā)現(xiàn)實(shí)際上它能節(jié)省時(shí)間、讓代碼更健壯。

本機(jī)并發(fā)

Go 利用 goroutines 和 channels 支持本機(jī)并發(fā),現(xiàn)在真的很方便。

首先,channels 的概念可能有點(diǎn)小麻煩,并且很容易被當(dāng)成某種數(shù)據(jù)結(jié)構(gòu)或排隊(duì)的實(shí)現(xiàn)。其實(shí)了解下來這些概念更加直白,可以真正享受它們帶來的價(jià)值,并進(jìn)行充分的利用。

Ivan Daniluk對 goroutines 和 channels 進(jìn)行了簡單的可視化:

復(fù)制代碼

package mainfunc main() { // create new channel of type int ch := make(chan int)// start new anonymous goroutine go func() { // send 42 to channel ch <- 42 }() // read from channel <-ch}
使用 Python 5 年后,我轉(zhuǎn)向了 Go

更多相關(guān)示例,請查看 goutoutines,channels 和 select 語句的Hootsuite 現(xiàn)實(shí)生活實(shí)現(xiàn),或 ArdanLabs 很棒的解釋。

使用 JSON

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

在 Go 中,可以將 JSON 解析為一種預(yù)定義結(jié)構(gòu)。任何不適合該結(jié)構(gòu)的字段都將被忽略,這是一個(gè)好事,可以把它當(dāng)成雙方之間的預(yù)定義協(xié)議。不會(huì)需要對 JSON 中收到的數(shù)據(jù)感到“驚訝”,JSON 字段和類型需要雙方“同意”。

復(fù)制代碼

{  “first”:“Elad”, “l(fā)ast”:“Leev”, “l(fā)ocation”:“IL”, “id”:“93” }
使用 Python 5 年后,我轉(zhuǎn)向了 Go

復(fù)制代碼

type AccountData struct { First string`json:“first”` Last string`json:“l(fā)ast”` Location string`json:“l(fā)ocation”` ID string`json:“id”` }

當(dāng)然,仍然可以在沒有結(jié)構(gòu)的情況下反序列化 JSON,但是如果可能的話應(yīng)該避免這樣做,保持語言的靜態(tài)性質(zhì)總是更好的選擇。

為了更好地理解 Go 中如何編寫 JSON,可以查看這篇文章,或“ Go By Example ”,這是可以找到的作為備忘單的最終資源。

如果太懶而不想把 JSON 轉(zhuǎn)換成 Go 結(jié)構(gòu)?沒問題 – 這個(gè)工具可以幫你。

清潔代碼

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

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

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

找到合適的庫和框架

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

以下是一些個(gè)人偏好 :

Python Requests =>net/http

內(nèi)置的net/http提供了 HTTP 客戶端和服務(wù)器,實(shí)現(xiàn)得非常棒且非常易用性好。

Flask + Jinja2 => Gin

Gin是一個(gè) HTTP Web 框架,具有非常簡單的 API – 路徑參數(shù),上傳文件,分組路由(/api/v1 ,/api/v2),自定義日志格式,提供靜態(tài)文件,HTML 渲染,真正強(qiáng)大的自定義中間件。這里提供了 benchmark 參考。

CLI Creation => Cobra

Cobra庫可用來創(chuàng)建功能強(qiáng)大的 CLI 應(yīng)用,還提供了生成應(yīng)用和命令文件的程序。許多廣泛使用的 Go 項(xiàng)目都是使用 Cobra 構(gòu)建的,包括 Kubernetes,etcd 和 OpenShift。

強(qiáng)烈推薦的一些其他的庫是:Viper,Gonfig和一個(gè)很棒的列表 – Awsome-Go。

其他資源

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

[1] Francesc Campoy – 一定要看看他的YouTube 頻道和GitHub 個(gè)人資料。Francesc 還組織了一些偉大的研討會(huì) -?- Go Tooling in Action和Web Applications Workshop。

[2] GopherCon 視頻

[3] Go Web Examples

[4] 幾個(gè) Twitter 賬戶:Golang Weekly,Gopher Academy,Golang News。

總結(jié)

作為一名五年狂熱的 Python 用戶,我擔(dān)心過渡到 Go 會(huì)很痛苦。但我真的很興奮,看到有一個(gè)真正強(qiáng)大的社區(qū),貢獻(xiàn)率和維護(hù)都很優(yōu)秀的資源,可以幫助大家順利過渡到 Go。Go 是當(dāng)今發(fā)展最快的編程語言之一,希望 Google 能夠好好管理,讓 Go 成為編寫云應(yīng)用和基礎(chǔ)架構(gòu)的首選語言。

目前對 Go 來說是一個(gè)激動(dòng)人心的時(shí)刻,鼓勵(lì)大家都來學(xué)習(xí)并成為 Gophers!

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

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多