一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - 我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

2020-05-09 11:24腳本之家 Golang

這篇文章主要給大家介紹了關于我放棄Python轉Go語言的9大理由,以及給大家推薦了6本優秀的go語言書籍,對同樣想學習golang的朋友們具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

前言

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

Go大概2009年面世以來,已經8年了,也算是8年抗戰。在這8年中,已經有很多公司開始使用Go語言開發自己的服務,甚至完全轉向Go開發,也誕生了很多基于Go的服務和應用,比如Dokcer、k8s等,很多的大公司也在用,比如google(作為開發Go語言的公司,當仁不讓)、Facebook、騰訊、百度、阿里、京東、小米以及360,當然除了以上提到的,還有很多公司也都開始嘗試Golang,這其中是什么原因呢?讓我們來一起分析分析。

原因 1:性能

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

Go 極其地快。其性能與 Java 或 C++相似。在我們的使用中,Go 一般比 Python 要快 30 倍。

以下是 Go 與 Java 之間的基準比較:

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

原因 2:語言性能很重要

對很多應用來說,編程語言只是簡單充當了其與數據集之間的膠水。語言本身的性能常常無關輕重。

但是 Stream 是一個 API 提供商,服務于世界 500 強以及超過 2 億的終端用戶。數年來我們已經優化了 Cassandra、PostgreSQL、Redis 等等,然而最終抵達了所使用語言的極限。

原因 3:開發者效率&不要過于創新

看一下絕佳的入門教程《開始學習 Go 語言》(http://howistart.org/posts/go/1/)中的一小段代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main
type openWeatherMap struct{}
 
func (w openWeatherMap) temperature(city string) (float64, error) {
 resp, err := http.Get("http://api.openweathermap.org/data/2.5/weather?APPID=YOUR_API_KEY&q=" + city)
 if err != nil {
 return 0, err
 }
 
 defer resp.Body.Close()
 
 var d struct {
 Main struct {
 Kelvin float64 `json:"temp"`
 } `json:"main"`
 }
 
 if err := json.NewDecoder(resp.Body).Decode(&d); err != nil {
 return 0, err
 }
 
 log.Printf("openWeatherMap: %s: %.2f", city, d.Main.Kelvin)
 return d.Main.Kelvin, nil
}

如果你是一個新手,看到這段代碼你并不會感到吃驚。它展示了多種賦值、數據結構、指針、格式化以及內置的 HTTP 庫。

當我第一次編程時,我很喜歡使用 Python 的高階功能。Python 允許你創造性地使用正在編寫的代碼,比如,你可以:

  • 在代碼初始化時,使用 MetaClasses 自行注冊類別
  • 置換真假
  • 添加函數到內置函數列表中
  • 通過奇妙的方法重載運算符

毋庸置疑這些代碼很有趣,但也使得在讀取其他人的工作時,代碼變得難以理解。

Go 強迫你堅持打牢基礎,這也就為讀取任意代碼帶來了便利,并能很快搞明白當下發生的事情。

注意:當然如何容易還是要取決于你的使用案例。如果你要創建一個基本的 CRUD API,我還是建議你使用 Django + DRF,或者 Rails。

原因 4:并發性&通道

Go 作為一門語言致力于使事情簡單化。它并未引入很多新概念,而是聚焦于打造一門簡單的語言,它使用起來異常快速并且簡單。其唯一的創新之處是 goroutines 和通道。Goroutines 是 Go 面向線程的輕量級方法,而通道是 goroutines 之間通信的優先方式。

創建 Goroutines 的成本很低,只需幾千個字節的額外內存,正由于此,才使得同時運行數百個甚至數千個 goroutines 成為可能。你可以借助通道實現 goroutines 之間的通信。Go 運行時間可以表示所有的復雜性。Goroutines 以及基于通道的并發性方法使其非常容易使用所有可用的 CPU 內核,并處理并發的 IO——所有不帶有復雜的開發。相較于 Python/Java,在一個 goroutine 上運行一個函數需要最小的樣板代碼。你只需使用關鍵詞「go」添加函數調用:

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

Go 的并發性方法非常容易上手,相較于 Node 也很有趣;在 Node 中,開發者必須密切關注異步代碼的處理。

并發性的另一個優質特性是競賽檢測器,這使其很容易弄清楚異步代碼中是否存在競態條件。下面是一些上手 Go 和通道的很好的資源:

  • https://gobyexample.com/channels
  • https://tour.golang.org/concurrency/2
  • http://guzalexander.com/2013/12/06/golang-channels-tutorial.html
  • https://www.golang-book.com/books/intro/10
  • https://www.goinggo.net/2014/02/the-nature-of-channels-in-go.html

原因 5:快速的編譯時間

當前我們使用 Go 編寫的最大微服務的編譯時間只需 6 秒。相較于 Java 和 C++呆滯的編譯速度,Go 的快速編譯時間是一個主要的效率優勢。我熱愛擊劍,但是當我依然記得代碼應該做什么之時,事情已經完成就更好了。

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

Go 之前的代碼編譯

原因 6:打造團隊的能力

首先,最明顯的一點是:Go 的開發者遠沒有 C++和 Java 等舊語言多。據知,有 38% 的開發者了解 Java,19.3% 的開發者了解 C++,只有 4.6% 的開發者知道 Go。GitHub 數據表明了相似的趨勢:相較于 Erlang、Scala 和 Elixir,Go 更為流行,但是相較于 Java 和 C++ 就不是了。

幸運的是 Go 非常簡單,且易于學習。它只提供了基本功能而沒有多余。Go 引入的新概念是「defer」聲明,以及內置的帶有 goroutines 和通道的并發性管理。正是由于 Go 的簡單性,任何的 Python、Elixir、C++、Scala 或者 Java 開發者皆可在一月內組建成一個高效的 Go 團隊。

原因 7:強大的生態系統

Go 有著強大的工具支持,面向 Redis、RabbitMQ、PostgreSQL、Template parsing、Task scheduling、Expression parsing 和 RocksDB 的穩定的庫。

Go 的生態系統相比于 Rust、Elixir 這樣的語言有很大的優勢。當然,它又略遜于 Java、Python 或 Node 這樣的語言,但它很穩定,而且你會發現在很多基礎需求上,已經有高質量的文件包可用了。

原因 8:GOFMT,強制代碼格式

Gofmt 是一種強大的命令行功能,內建在 Go 的編譯器中來規定代碼的格式。從功能上看,它類似于 Python 的 autopep8。格式一致很重要,但實際的格式標準并不總是非常重要。Gofmt 用一種官方的形式規格代碼,避免了不必要的討論。

原因 9:gRPC 和 Protocol Buffers

Go 語言對 protocol buffers 和 gRPC 有一流的支持。這兩個工具能一起友好地工作以構建需要通過 RPC 進行通信的微服務器(microservices)。我們只需要寫一個清單(manifest)就能定義 RPC 調用發生的情況和參數,然后從該清單將自動生成服務器和客戶端代碼。這樣產生代碼不僅快速,同時網絡占用也非常少。

對每位程序員來說,不管哪種語言,“學的扎實,能學以致用”才是王道!本文就為對 Go 語言感興趣的朋友們提供一些口碑不錯的學習書籍建議。

 一、《Go語言學習筆記》

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

(未找到對應版本的電子書,大家可以去作者github:https://github.com/qyuhen/book)

推薦理由:作為時下流行的一種系統編程語言,Go 簡單易學,性能很好,且支持各類主流平臺。已有大量項目采用 Go 編寫,這其中就包括 Docker 等明星作品,其開發和執行效率早已被證明。本書經四年多逐步完善,內容覆蓋了語言、運行時、性能優化、工具鏈等各層面知識。且內容經大量讀者反饋和校對,沒有明顯的缺陷和錯誤。

適合人群:本書不適合編程初學入門,可供有實際編程經驗或正在使用Go 工作的人群參考。

二、《Go語言實戰》

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

推薦理由:William Kennedy是一位熟練的軟件開發者,也是博客GoingGo.Net的作者。本書向讀者提供一個專注、全面且符合語言習慣的視角。Go語言實戰同時關注語言的規范和實現,涉及的內容包括語法、類型系統、并發、管道、測試,以及其他一些主題。

適合人群:全覆蓋,側重初學者

三、《Go Web編程》

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

推薦理由: 《Go Web編程》介紹如何用Go語言進行Web應用的開發,將Go語言的特性與Web開發實戰組合到一起,幫讀者成功地構建跨平臺的應用程序,節省Go語言開發Web的寶貴時間。有了這些針對真實問題的解決方案放在手邊,大多數編程難題都會迎刃而解,讀者可以更加方便地找到各種編程問題的解決方案,內容涵蓋文本處理、表單處理、Session管理、數據庫交互、加/解密、國際化和標準化,以及程序的部署維護等運維方面的知識,最后還介紹了一個快速開發的框架幫助您迅速進入Go語言的Web開發。

適合人群:全覆蓋

四、《Go語言編程》

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

推薦理由:作者是業界大神級別的人物,七牛云存儲團隊的核心技術人員,也是國內最早應用和推廣 Go 語言技術的專家!本書內容簡煉,重點突出,將 Go 語言的特性做了充分的分析和總結,并給出 Go 實例的代碼;內容體系可能更適合有一定編程基礎的程序員閱讀!本書是國內最早的中文版的 Go 技術書籍之一,雖然發行時間比較早,但仍可以作為重要參考!電子版和紙質版都有!

適合人群:全覆蓋,側重有經驗的程序員

五、《Go并發編程實戰(第2版)》

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

推薦理由:本書首先介紹了Go語言的優秀特性、安裝設置方法、工程結構、標準命令和工具、語法基礎、數據類型以及流程控制方法,接著闡述了與多進程編程和多線程編程有關的知識,然后重點介紹了goroutine、channel以及Go提供的傳統同步方法,最后通過一個完整實例——網絡爬蟲框架進一步闡述Go語言的哲學和理念,同時分享作者在多年編程生涯中的一些見解和感悟。

適合人群:適用于有一定計算機編程基礎的從業者以及對Go語言編程感興趣的愛好者,非常適合作為Go語言編程進階教程。

六、《Go 語言程序設計》

我放棄Python轉Go語言的9大理由(附優秀書籍推薦)

推薦理由:國外最經典的Go語言著作,Go語言編程的先驅者Mark Summerfield的實踐經驗總結。這是一本Go語言實戰指南,幫你了解Go語言,按Go語言的方式思考,以及使用Go語言來編寫高性能軟件。

作者展示了如何編寫充分利用Go語言突破性的特性和慣用法的代碼,以及Go語言在其他語言之上所做的改進,并著重強調了Go語言的關鍵創新。

注重實踐教學,每章都提供了多個經過精心設計的代碼示例。

由國內第一個核心服務完全采用Go語言實現的團隊——七牛團隊核心成員翻譯。

適合人群:適用于有一定Go語言編程編程的愛好者,非常適合作為Go語言編程進階教程。

總結

Go 是一種非常高效的語言,高度支持并發性。同時,它也像 C++和 Java 一樣快。雖然相比于 Python 和 Ruby,使用 Go 建立東西需要更多的時間,但在后續的代碼優化上可以節省大量時間。這也是為什么向大家推薦這篇文章的原因。

延伸 · 閱讀

精彩推薦
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
主站蜘蛛池模板: 国产午夜精品久久理论片小说 | 免费精品在线视频 | 紧身短裙女教师波多野 | 免费欧美一级 | 91午夜在线观看 | 国产专区亚洲欧美另类在线 | 亚洲天堂三区 | 精品一区二区三区高清免费不卡 | 色综合久久最新中文字幕 | 亚洲国产剧情中文视频在线 | 动漫人物差差差动漫人物免费观看 | 99国产情在线视频 | 国产最新进精品视频 | 三级理论在线播放大全 | 久久精品国产在热亚洲完整版 | 精品视频中文字幕 | 色女的乖男人 | 国内自拍第1页 | 国产成人h综合亚洲欧美在线 | 半挠脚心半黄的网站 | 桃色视频软件 | 被黑人同学彻底征服全文小说阅读 | 国产成人影院一区二区 | 欧美性色黄大片四虎影视 | 王的视频vk | 日本一区视频 | 国产在线视频第一页 | 女人麻豆国产香蕉久久精品 | 午夜国产精品影院在线观看 | 久久免费看少妇高潮A片JA | 欧美人与牲动交xxx 欧美人妖另类性hd 欧美人人干 | 色综合伊人色综合网亚洲欧洲 | 513热点网 | 99久久999久久久综合精品涩 | 成年美女黄网站色视频大全免费 | 国产资源视频在线观看 | 亚洲 欧美 中文字幕 在线 | 日本不卡一区二区三区在线观看 | 亚洲29p| 99视频免费在线 | 久久受www免费人成_看片中文 |