亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Go語言其實有很多優(yōu)良特性,很多時候都可以代替Python

DPVg_AI_era ? 來源:lq ? 2019-02-13 10:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

出身名門的Go語言在誕生之初就吸引了大批開發(fā)者的關(guān)注。比起大家熟悉的Python,Go語言其實有很多優(yōu)良特性,很多時候都可以代替Python。Go和Python你更喜歡誰?

Go 語言誕生于谷歌,由計算機領(lǐng)域的三位宗師級大牛 Rob Pike、Ken Thompson 和 Robert Griesemer 寫成。由于出身名門,Go 在誕生之初就吸引了大批開發(fā)者的關(guān)注。誕生十年以來,已經(jīng)涌出了很多基于 Go 的應(yīng)用。就在不多久之前,知乎也舍棄了 Python,轉(zhuǎn)用Go 重構(gòu)推薦系統(tǒng)。谷歌前員工 Jake Wilson 認為,比起大家熟悉的 Python,Go 語言其實有很多優(yōu)良特性,很多時候都可以代替 Python,他已經(jīng)在很多任務(wù)中使用 Go 語言替代了 Python。那么 Go 語言到底有著什么樣的獨特魅力?它有哪些勝于 Python 的地方呢?讓我們一起來了解一下吧!

2019 年程序員最想學(xué)習(xí)的編程語言

出身名門的 Go 語言

對于一門只有十年歷史的新語言,Go 的發(fā)展勢頭相當(dāng)迅猛,容器界的扛把子 Docker 就是用 Go 寫的,國內(nèi)也有不少團隊廣泛使用 Go。近日,HackerRank 在社區(qū)發(fā)起了程序員技能調(diào)查,來自 100 多個國家、超過 70000 名開發(fā)者參與其中。調(diào)查結(jié)果顯示,2019 年,程序員最想學(xué)習(xí)的編程語言 Top 3 分別是 Go、Kotlin 和 Python,其中 Go 以 37.2% 的比例排在首位。

但 Go 要想撼動編程界的常青樹 Java 二十多年的地位無疑難度頗大。據(jù) HackerRank 數(shù)據(jù)顯示,2018 年,Java 在開發(fā)者最受歡迎的編程語言排行榜中仍然排名第 2,Python 排名第 4,Go 排名第 13,距離第一名 JavaScript 還有不小的差距。

但對本文作者 Jack Wilson 來說,Go 語言雖然“年紀(jì)尚小”,但已經(jīng)擁有很多非常優(yōu)秀的特性。

Go 語言到底好在哪?

在很多任務(wù)上,我已經(jīng)用 Go 語言代替了 Python,舉幾個例子:

處理儲存在 S3 上的云端日志

在 S3 上的 bucket 和 / 或 region 之間移動 TB 級別大小的文件

匹配本地的數(shù)據(jù)庫記錄和 S3 上的文件,以保證文件處于同步狀態(tài)

這些任務(wù)大多是一次性的,所以使用腳本語言操作就會比較合適。這些任務(wù)需要快速地編程,而代碼用過一次一般就舍棄了。一般來說,這種任務(wù)的需求都比較新穎、比較專,其代碼很少需要復(fù)用。下面就來介紹一下,針對這種任務(wù)為什么可以用 Go 語言來替代 Python。

擁有編譯器很方便

我經(jīng)常在寫 Python 時犯很低級的錯誤。我會給變量或函數(shù)命錯名,或向它們傳遞錯誤的參數(shù)。這樣的錯誤用調(diào)試工具可以找出一部分,但這種工具一般需要專門設(shè)置。我從來沒很方便地配置過 pylint,而且我也不喜歡用那些很重的、配置起來更麻煩的 IDE。最慘的情況是,你可能會不小心打錯變量名,而這種錯誤又不太容易發(fā)現(xiàn)。你的腳本可能會跑好幾個小時才遇上這個錯誤,然后一切都崩潰了,你又得從頭開始跑這個腳本。這種錯誤大部分都可以靠單元測試檢出,但單元測試很少能覆蓋 100% 的代碼,而且我并不想浪費時間去給一個只用一次的腳本寫單元測試。而帶編譯器的語言就可以解決以上所有問題。編譯器可以檢測出你犯的所有低級錯誤。出于這點原因,我在寫長達幾百行的代碼時,更傾向于使用 Go 這類語言。

開發(fā)速度

然而,需要編譯的語言的一個缺點是,一般你的開發(fā)速度會下降。這點在 C/C++ 和 Java 等語言上體現(xiàn)得尤其明顯。而 Go 是一個非常簡單的語言,我發(fā)現(xiàn)它的開發(fā)速度并沒有被拖慢多少。不要誤會,我的意思并不是說它比 Python 還快,而是想說,用 Go 語言沒有比 Python 慢很多,一般達到使用 Python 開發(fā)速度的 85% 還是沒問題的。相對于擁有編譯器能避免的那些低級錯誤來說,我認為犧牲 15% 的開發(fā)速度還是很值的。

更好的并行性

你可能已經(jīng)知道,Go 語言就是為并行而生的。在我的團隊里經(jīng)常會需要并行程序,因為我們要在 S3 上操作我們數(shù)據(jù)庫中大量的數(shù)據(jù)。如果該任務(wù)是 IO 密集型的(實際上很多任務(wù)都是),我們就可以很容易地部署 Python 線程。但如果任務(wù)是 CPU 密集型的,用 Python 就比較不方便了,因為有全局解釋器鎖的存在。我非常享受在 Go 語言中簡單代碼不用修改就能直接多線程運行的爽快感。不知你在 Python 中有沒有遇到過這種問題:直接復(fù)制粘貼的多線程代碼卻完全不工作。在 Go 語言中就不會有此問題。

部署簡單

我比較喜歡把所有依賴放在單個二進制文件里。我經(jīng)常在 EC2 服務(wù)器上運行自己的腳本,好讓環(huán)境更加接近我們在 S3 上的服務(wù)器。如果用 Python 的話,我需要保證所有需要的包都在服務(wù)器上裝好,而且我的同事不能在服務(wù)器上裝任何可能產(chǎn)生沖突的包。虛擬環(huán)境可以解決大部分問題,但我還是覺得用 Go 語言更方便。我一般是在 Mac 和 Linux 上交叉編譯我的代碼,將其拷貝到遠程服務(wù)器上,然后就可以任其運行了。我的代碼所需要的所有依賴都在一個二進制文件里。

風(fēng)格一致

一開始,Go 語言的格式化工具 gofmt 實在是讓我抓狂,尤其是它在代碼縮進時要求使用 tab 鍵而不是空格鍵。我覺得這簡直是瘋了。但是我用了一段時間后,就開始“真香”了。寫代碼時,我在格式上可以天馬行空,格式化工具會幫我完成一切。我的所有代碼風(fēng)格都是一致的,即使我是在寫不同的項目。這是因為格式化是標(biāo)準(zhǔn) Go 工具的一個特性。但我如果想在 Python 中實現(xiàn)這一點,就要費些勁兒了。我需要正確地配置 pylint 工具,并要保證在每一個項目中都使用它。

更便捷的工具

Gofmt 只是 Go 語言眾多工具中的一個小例子。所有我喜歡用的編輯器——VSCode,vim 和 Sublime Text 中,都有 Go 語言相應(yīng)的擴展,讓我能夠方便地享受到 Go 工具的優(yōu)點。這樣,我就能獲得寫 Java 時的那種智能體驗,卻不需要真正使用一個 IDE。我在用 Python 時從未獲得過這種體驗。

Go 語言當(dāng)然也有缺點

我每次看到批評 Go 語言的文章時,里面講的幾乎都是 Go 語言對關(guān)鍵特性的缺失,比如泛型。我倒是認為沒有泛型沒什么影響——你會發(fā)現(xiàn),使用map和切片(Slice)就能實現(xiàn)多得驚人的操作。但是我在使用 Go 語言的過程中遇到了很多其他問題。

缺乏靈活性

首先,Go 語言可能是我用過的語言里最“固執(zhí)”的語言了。比如,它除了會強迫你使用 tab 而不是空格鍵縮進(假設(shè)你用了 gofmt 工具),會強迫你使用特定的文件組織結(jié)構(gòu),還會強迫你在 GOPATH 環(huán)境變量中編程,如此等等。這種語言有太多難以改變的特性了。Go 語言簡單易學(xué)的原因之一恐怕就是你不能改變這些特性。如果你不愿意將所有首字母大寫的變量名 export 一遍,那真是抱歉了。幸運的是,Go 的這些特性倒是沒有觸犯我的原則底線,但是如果有人認為里面的某些要求根本無法理喻,我也能夠理解。相比之下 Python 就靈活多了。

庫支持有點差勁

在這方面把 Go 語言和 Python 做比較有些不公平。Go 的出現(xiàn)比 Python 晚很多,但當(dāng)我發(fā)現(xiàn)有些功能 Go 居然不支持的時候,還是覺得很困惑。我甚至發(fā)現(xiàn) StackOverflow 上很多人 po 出了本應(yīng)該作為內(nèi)置功能的代碼段,而且大家都需要該功能,紛紛將代碼復(fù)制粘貼到自己的項目下。這類功能不應(yīng)該嵌入到語言內(nèi)部嗎?說到這里,我想到了近幾年的兩個例子:

給切片排序(幸運的是在 Go 1.8 版本中這點方便多了)

Math.round 只支持整數(shù),不能進行浮點數(shù)的取整(比如你想找一個最接近 0.5 的整數(shù),Go 語言就無法完成)。甚至在 Go 1.10 版本之前,根本沒有 math.round 函數(shù)

當(dāng)然,這些問題的原因有一部分是 Go 語言沒有泛型,另一部分是因為 Go 的開發(fā)者們只給 Go 的標(biāo)準(zhǔn)庫中添加最最必要的功能。

這兩點我都理解,但是在遇到很小的問題卻需要自己寫代碼解決時還是感到煩惱。

希望隨著 Go 語言的發(fā)展,它的問題會變得越來越少。

Go 和 Python 你更喜歡誰?歡迎留言交流!

作者介紹:

Jake Wilson,現(xiàn)任 SketchUp web team 技術(shù)經(jīng)理,研究范圍包括 HTML5、WebGL、Google Closure、Typescript、Java Redis 后端開發(fā)等,從事軟件開發(fā)、硬件、產(chǎn)品、創(chuàng)業(yè)和激勵方面的工作。他曾就職于 Boxuno.com、Monolla.com、谷歌等公司。在谷歌,他曾參與 Goole+、chrome、Webmaster Tools 等項目。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1958

    瀏覽量

    38712
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4851

    瀏覽量

    89348
  • go語言
    +關(guān)注

    關(guān)注

    1

    文章

    159

    瀏覽量

    9584

原文標(biāo)題:再見,Python!你好,Go語言

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    Linux 編程語言盤點:從內(nèi)核到AI的全棧選擇

    在工控圈和嵌入式圈里,有一個常年被討論的問題: ?“在 Linux 上,到底該用什么語言編程?” 有人堅信:C 才是真正的工業(yè)語言。有人反駁:Python 才是效率王者。還有人推崇 Go
    的頭像 發(fā)表于 11-06 17:05 ?333次閱讀

    語音播報芯片:讓產(chǎn)品“開口說話”的秘密

    不知道大家發(fā)現(xiàn)沒有,在我們的日常生活當(dāng)中,其實有很多會“說話”的產(chǎn)品,比如我們?nèi)粘rT行電動自行車,在沒電的時候它會通過語音播報提醒你“電量低請及時充電”。在便利店或者很多餐飲商家付款的
    的頭像 發(fā)表于 09-28 09:28 ?307次閱讀
    語音播報芯片:讓產(chǎn)品“開口說話”的秘密

    NuMicro 中的每個 ADC 通道都可以嗎?

    NuMicro 中的每個 ADC 通道都可以嗎?具有相同模塊的系列微控制器同時采樣?
    發(fā)表于 08-22 06:29

    跟老齊學(xué)Python:從入門到精通

    礎(chǔ)的學(xué)習(xí)者介紹一門時下比較流行、并且用途比較廣泛的編程語言,所以,本書讀起來不晦澀,并且在其中穿插了很多貌似與Python 編程無關(guān),但與學(xué)習(xí)者未來程序員職業(yè)生涯有關(guān)的內(nèi)容。 獲取完整文檔資料可下載附件哦?。。?! 如果內(nèi)容
    發(fā)表于 06-03 16:10

    零基礎(chǔ)入門:如何在樹莓派上編寫和運行Python程序?

    在這篇文章中,我將為你簡要介紹Python程序是什么、Python程序可以用來做什么,以及如何在RaspberryPi上編寫和運行一個簡單的Python程序。什么是
    的頭像 發(fā)表于 03-25 09:27 ?1377次閱讀
    零基礎(chǔ)入門:如何在樹莓派上編寫和運行<b class='flag-5'>Python</b>程序?

    TLC5615與單片機通信時是不是用任意IO口都可以通信,只要時序和數(shù)據(jù)是按說明書通信的?

    TLC5615與單片機通信時是不是用任意IO口都可以通信,只要時序和數(shù)據(jù)是按說明書通信的?
    發(fā)表于 02-13 07:17

    ads1256能夠?qū)拇嫫髦挡僮?,讀寫都可以,就是讀出的AD值不正確,為什么?

    ads1256能夠?qū)拇嫫髦挡僮?,讀寫都可以,就是讀出的AD值不正確,電路直接照手冊參考電路接的,參考電壓直接拉到5V用面包板搭的電路。
    發(fā)表于 02-12 07:38

    很多大企業(yè)為何都用模塊電源代替開關(guān)電源

    很多大企業(yè)為何都用模塊電源代替開關(guān)電源 引言 DC/DC電源模塊是用開關(guān)電源的思想實現(xiàn)的,他們的原理沒有什么區(qū)別。DC/DC電源模塊的優(yōu)點主要體現(xiàn)在體積小,轉(zhuǎn)換效率大、穩(wěn)定性更好等。而開關(guān)電源可以
    的頭像 發(fā)表于 12-30 10:33 ?1141次閱讀

    ADS1299單端輸入噪聲為什么會高很多

    想請教下TI的工程師們。最近在設(shè)計基于ADS1299的采集板,采集電路參考了ADS1299 EVM開發(fā)板電路,測試了雙端輸入和單端輸入,發(fā)現(xiàn)單端輸入時噪聲要高很多,特別是50Hz工頻干擾。單端輸入
    發(fā)表于 12-27 07:10

    Triton編譯器支持的編程語言

    Triton編譯器支持的編程語言主要包括以下幾種: 一、主要編程語言 Python :Triton編譯器通過Python接口提供了對Triton語言
    的頭像 發(fā)表于 12-24 17:33 ?1357次閱讀

    lmx2595輸出端口A,端口B,是只有其中一端口可以輸出19GHz,還是A和B端口都可以輸出19GHz?

    端口可以輸出到19GHz? 但是在數(shù)據(jù)表格里的輸出特性,卻沒有說明。如下圖: 表格里的VCO2X_EN=1,而OUTxPWR = 20, 這個‘OUTx’表明2個端口都可以輸出19GHz? 希望TI的大神
    發(fā)表于 12-13 06:26

    AFE0064的輸入應(yīng)該是電荷信號還是電流信號呢?還是都可以?

    想問一下,AFE0064的輸入應(yīng)該是電荷信號還是電流信號呢?還是都可以?
    發(fā)表于 12-04 06:07

    對比Python與Java編程語言

    Python與Java都是目前非常流行的編程語言,它們各有其獨特的優(yōu)勢和適用場景。以下是對這兩種編程語言的對比: 一、語法和易用性 Python 語法簡潔,代碼更易讀,非常適合初學(xué)者。
    的頭像 發(fā)表于 11-15 09:31 ?1952次閱讀

    ADS131M02-Q1最大的測量范圍是多少?

    這是原理圖部分 , 我的配置clkin是8Mhz,OSR設(shè)置是16384,gain設(shè)置是1,想問下最大的測量范圍,是否能測量范圍內(nèi)電壓 當(dāng)我輸入為0.068V時,用131測量,根據(jù)公式 乘上channal1中的值,計算出來是0.069V,偏差其實有些大,問下您我是否計算有問題
    發(fā)表于 11-15 06:02

    在學(xué)習(xí)go語言的過程踩過的坑

    作為一個5年的phper,這兩年公司和個人都在順應(yīng)技術(shù)趨勢,新項目慢慢從php轉(zhuǎn)向了go語言,從2021年到現(xiàn)在,筆者手上也先后開發(fā)了兩個go項目。在學(xué)習(xí)go
    的頭像 發(fā)表于 11-11 09:22 ?778次閱讀