<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          寫(xiě)了50萬(wàn)行Go代碼是一種什么樣的體驗(yàn)?

          共 2009字,需瀏覽 5分鐘

           ·

          2021-05-20 01:11

          點(diǎn)擊上方藍(lán)色“Go語(yǔ)言中文網(wǎng)”關(guān)注,每天一起學(xué) Go

          大家好,我是 polarisxu。

          今天看到一篇文章:看看寫(xiě)了 50 萬(wàn)行代碼的 Gopher 對(duì) Go 有什么感想。我對(duì)其中的核心內(nèi)容進(jìn)行整理,分享給大家!

          先簡(jiǎn)單介紹下可汗學(xué)院(Khan Academy)。

          這是一個(gè)非營(yíng)利性組織,其使命是在任何地方為任何人提供免費(fèi)的、世界級(jí)的教育。

          全球有 6.17 億兒童缺乏基本的數(shù)學(xué)和閱讀技能。可汗學(xué)院是一個(gè)提供他們所需教育的非營(yíng)利組織,因此需要大家的幫助,你的幫忙可以改變一個(gè)孩子的一生。

          所以,從網(wǎng)站介紹可以看出,這個(gè)組織主要靠大家的贊助維持運(yùn)營(yíng)。如果你支持這樣的公益事業(yè),可以到官網(wǎng):https://www.khanacademy.org/ 贊助。

          從 Python2 遷移到 Go

          可汗學(xué)院的項(xiàng)目 Goliath,最開(kāi)始使用 Python2 實(shí)現(xiàn)的,2019 年逐步將其遷移到了 Go。這里有一篇文章介紹了遷移的事情:https://blog.khanacademy.org/go-services-one-goliath-project/。

          因?yàn)檫@個(gè)決定,現(xiàn)在可汗學(xué)院所有的后端和全棧工程師都開(kāi)始寫(xiě) Go 代碼,經(jīng)過(guò)幾年的積累,該項(xiàng)目跨域了一個(gè)巨大的里程碑:有超過(guò) 50 萬(wàn)行 Go 代碼在線上運(yùn)行著。這對(duì)于 Go 整個(gè)社區(qū)來(lái)說(shuō)也是一件好事。

          工程師很喜歡 Go

          可汗學(xué)院的工程師們普遍認(rèn)為「Go 很容易寫(xiě)和讀」,用 Go 越多就越喜歡它。

          一個(gè)有多年 .NET 經(jīng)驗(yàn)的工程師說(shuō),Go 的錯(cuò)誤處理和 .NET 的異常處理很不一樣。雖然經(jīng)常要處理 error,但如果一個(gè)函數(shù)沒(méi)有返回錯(cuò)誤,那可以確定它一定成功了,這一點(diǎn)還是很棒的。

          此外,他們對(duì) Go 的工具鏈很喜歡。比如通過(guò) go doc 可以查找標(biāo)準(zhǔn)庫(kù)的文檔,特別方便。gofmt 讓代碼格式都一直,很適合閱讀代碼。雖然 Go Module 在社區(qū)抱怨的聲音不少,但相比之前來(lái)說(shuō),還是有很大進(jìn)步,而且可汗學(xué)院在使用過(guò)程中沒(méi)有什么特別差的體驗(yàn)。

          同時(shí),他們很喜歡 Go 的編譯速度,那叫一個(gè)快!

          泛型,還是需要的

          雖然大部分時(shí)候,并不需要泛型。但有時(shí)候,特別是是在寫(xiě)內(nèi)部庫(kù)時(shí),尤其涉及到 slice 時(shí),明顯得感覺(jué)到需要泛型。

          沒(méi)有泛型是目前社區(qū)對(duì) Go 抱怨最多的(雖然也有人說(shuō)不需要泛型,有泛型了就不用 Go 了。。。),目前 Go 團(tuán)隊(duì)花了大量的時(shí)間在推進(jìn)泛型。目前已經(jīng)可以嘗鮮,預(yù)計(jì)泛型會(huì)在 1.18 正式發(fā)布。

          他們?cè)谶w移 Python 代碼時(shí),有些 Python 的語(yǔ)言結(jié)構(gòu),使用 Go 實(shí)現(xiàn)需要花費(fèi)較多時(shí)間。不過(guò),Go 的語(yǔ)言特性少,使得代碼更一致,可讀性更好。就他們的系統(tǒng),有些特性,需要 2.7 倍的 Go 代碼實(shí)現(xiàn)同樣功能的 Python 代碼。注意,是部分功能。

          習(xí)慣了 Python 的人,他們希望 Go 中能夠有更多的高階函數(shù)。隨著泛型的加入,這方面可能會(huì)加強(qiáng),比如計(jì)劃增加的 slices 包。

          性能和并發(fā)性

          相比 Python,發(fā)現(xiàn) Go 的性能非常優(yōu)秀。盡管遷移過(guò)程中,有點(diǎn)直接從 Python 翻譯到 Go 的感覺(jué),沒(méi)有對(duì) Go 代碼做專門優(yōu)化,但性能表現(xiàn)依然搶眼。優(yōu)化后會(huì)有更好的表現(xiàn)。

          其中一名工程師發(fā)現(xiàn),Python 版本中,某些批量數(shù)據(jù)更改每小時(shí)會(huì)產(chǎn)生大約 100 個(gè) Google Cloud Datastore 競(jìng)爭(zhēng)警告,而在 Go 版本中,競(jìng)爭(zhēng)警告接近于零,因?yàn)樗幚頂?shù)據(jù)的速度要快得多。他們有一個(gè)包含 1000 名學(xué)生的課程,在 Python 中加載需要 28 秒,而在 Go 中只需要 4 秒。

          雖然他們的 Python 版本時(shí)候單線程的,但 Go 版本還是使用了并發(fā)的特性。

          Go 官方一般推薦使用 Goroutine + Channel,但可汗學(xué)院發(fā)現(xiàn),他們使用 sync 包的數(shù)量遠(yuǎn)超 channel,不知道這種情況將來(lái)會(huì)不會(huì)改變。

          50 萬(wàn)行代碼后的總結(jié)

          • 一般來(lái)說(shuō),實(shí)現(xiàn)同樣的功能,Go 代碼會(huì)比 Python 多;
          • 但 Go 的速度快,工具好用,而且在線上運(yùn)行穩(wěn)定、良好;

          雖然可汗學(xué)院的工程師有不同的背景,對(duì) Go 和其他語(yǔ)言也有不同的看法。經(jīng)過(guò)這段時(shí)間的磨合,目前看,對(duì) Go 他們還算滿意。


          你寫(xiě)了多少 Go 代碼?你對(duì) Go 的感受是什么?



          推薦閱讀


          福利

          我為大家整理了一份從入門到進(jìn)階的Go學(xué)習(xí)資料禮包,包含學(xué)習(xí)建議:入門看什么,進(jìn)階看什么。關(guān)注公眾號(hào) 「polarisxu」,回復(fù) ebook 獲取;還可以回復(fù)「進(jìn)群」,和數(shù)萬(wàn) Gopher 交流學(xué)習(xí)。

          瀏覽 30
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产午夜精品一区二区芒果视频 | 免费日逼电影 | 日本一区二区在线视频 | 激情性爱视频网站 | 最新国产中文字幕在线播放 |