天天看點

Go語言Web程式設計怎麼快速學習,Go語言有哪些優勢,Go Web程式設計有哪些優秀書籍?

1.Go語言之前程式設計的痛點

(1)為什麼會設計Go語言?

        我們先來了解一下Go的作者和主要核心開發者們:Robert Griesemer, Rob Pike 和 Ken Thompson。設計Go語言是為了解決當時Google開發遇到的以下這些問題:

  • 大量的C++代碼,同時又引入了Java和Python;
  • 成千上萬的工程師;
  • 數以萬計行的代碼;
  • 分布式的編譯系統;
  • 數百萬的伺服器;

        其主要有以下幾個方面的痛點:

  • 編譯慢;
  • 失控的依賴;
  • 每個工程師隻是用了一個語言裡面的一部分;
  • 程式難以維護(可讀性差、文檔不清晰等);
  • 更新的花費越來越長;
  • 交叉編譯困難;

        是以,他們當時設計Go的目标是為了消除各種緩慢和笨重、改進各種低效和擴充性。Go是由那些開發大型系統的人設計的,同時也是為了這些人服務的;它是為了解決工程上的問題,不是為了研究語言設計;它還是為了讓我們的程式設計變得更舒适和友善。

        但是結合Google當時内部的一些現實情況,如很多工程師都是C系的,是以新設計的語言一定要易學習,最好是C-like的語言;因為有太多的分布式系統、太多的開發者,是以新的語言一定要可以Scale,這個包括開發、工程師、代碼、部署和依賴;20年沒有出新的語言了,是以新設計的語言必須是現代化的(例如内置GC)等情況,他們覺得要實作這個目标就需要Go成為一個大家都認可的語言。

        最後根據實戰經驗,他們向着目标設計了Go這個語言,其主要的特色有:

  • 沒有繼承的OO;
  • 強一緻類型;
  • Interface但是不需要顯示申明(Duck Type);
  • Function 和Method;
  • 沒有異常處理(Error is value);
  • 基于首字母的可通路特性;
  • 不用的Import或者變量引起編譯錯誤;
  • 完整而卓越的标準庫包;

        Go釋出之後,很多公司特别是雲計算公司開始用Go重構他們的基礎架構,很多都是直接采用Go進行了開發。這幾年火到爆的Docker、Kubernetes就是采用Go開發的。我們來看看目前為止采用Go的一些國内外公司,國外的如Google、Docker、Apple、Cloud Foundry、CloudFlare、Couchbase、CoreOS、Dropbox、MongoDB、AWS等公司,國内的如阿裡雲CDN、百度、小米、七牛雲、PingCAP、華為、金山軟體、獵豹移動、餓了麼等公司。

(2)Go主要應用的系統。

        上面那些基本上就是Go的曆史背景和設計初衷,那麼目前Go主要應用于哪些系統呢?

        目前Go主要應用在下面這些系統:

        ①Web伺服器程式設計,以前你如果使用C或者C++做的那些事情,用Go來做很合适,例如處理日志、資料打包、虛拟機處理、檔案系統等。

        ②容器開發:Docker,使開發高效且可預測;Kubernetes,也稱為K8s,是一個開源系統,用于自動化容器化應用程式的部署,擴充和管理。

        ③微服務、分布式系統、資料庫代理器等,例如gRPC、Etcd等。

        ④Web網絡程式設計,這一塊目前應用最廣,包括Web應用、API應用、下載下傳應用,而且Go内置的net/http包足夠強大,基本就涵蓋了常用的Web應用方法了。

        ⑤資料庫,前一段時間Google開發的Groupcache,Couchbase的部分組建,Tidb,Cockroachdb,Influxdb等。

        ⑥雲平台,目前國外很多雲平台在采用Go開發,CloudFoundy的部分組建,前VMare的技術總監自己出來搞的Apcera雲平台。

(3)為什麼選擇使用Go語言?

        國内很多雲創業公司都會選擇把Go作為首要語言,例如七牛雲等。為什麼會選擇Go呢?與其他語言的應用相比,它有什麼優點呢?

        ①簡單,學習曲線平穩;

        它包含了類C文法、GC内置和工程工具。這一點非常重要,因為Go語言容易學習,是以一個普通的大學生花一個星期就能寫出來可以上手的、高性能的應用。在國内大家都追求快,這也是為什麼國内Go流行的原因之一。

        ②極緻效率;

        Go擁有接近C的運作效率和接近PHP的開發效率,這就很有利的支撐了上面大家追求快速的需求。

        ③Google公司開發;

        之是以說Go出身名門,是因為我們知道Go語言出自Google公司,這個公司在業界的知名度和實力自然不用多說。Google公司聚集了一批牛人,在各種程式設計語言稱雄争霸的局面下推出新的程式設計語言,自然有它的戰略考慮。而且從Go語言的發展态勢來看,Google對它這個新的寵兒還是很看重的,Go自然有一個良好的發展前途。我們看看Go語言的主要創造者,血統純正這點就可見端倪了。

        ④自由高效:組合的思想、無侵入式的接口;

        Go語言可以說是開發效率和運作效率二者的完美融合,天生的并發程式設計支援。Go語言支援目前所有的程式設計範式,包括過程式程式設計、面向對象程式設計以及函數式程式設計。程式員們可以各取所需、自由組合、想怎麼玩就怎麼玩。

        ⑤強大的标準庫;

        這包括網際網路應用、系統程式設計和網絡程式設計。Go裡面的标準庫基本上已經是非常穩定了,特别是我這裡提到的三個,網絡層、系統層的庫非常實用。

        ⑥部署友善:二進制檔案、Copy部署;

        這一點是很多人選擇Go的最大理由,因為部署太友善了,是以現在也有很多人用Go開發運維程式。

        ⑦簡單而強大的并發處理能力;

        它包含了降低心智的并發和簡易的資料同步,我覺得這是Go最大的特色。之是以寫正确的并發、容錯和可擴充的程式如此之難,是因為我們用了錯誤的工具和錯誤的抽象,Go可以說這一塊做的相當簡單。

        ⑧規範,不會寫出垃圾代碼;

        Go擁有強大的編譯檢查、嚴格的編碼規範和完整的軟體生命周期工具,具有很強的穩定性,穩定壓倒一切。那麼為什麼Go相比于其他程式會更穩定呢?這是因為Go提供了軟體生命周期(開發、測試、部署、維護等等)的各個環節的工具,如go tool、gofmt、go test等。

2.Go語言Web程式設計的優勢

        通過上面的介紹我們知道,Go語言Web開發領域有得天獨厚的優勢!Go語言被稱為雲計算時代的C語言。我們知道,在Web開發的世界裡,靈活才是王道。誰能使用更少的費用和資源來更快地完成網站和網絡應用,誰就獲得更多的競争優勢。此外,對于程式設計者而言,不僅希望快速完成Web開發,對可用性和使用者體驗的要求也很高。

        這需要開發更多的功能和進階程式設計語言來開發網站功能,例如Go語言。本文着重介紹了Go語言 Web開發的好處,并将Go語言 Web程式設計與其他高度流行的語言進行了比較,例如 Python。

        讓我們看一下Python的特性,以及為什麼它能夠成為Web開發領域的主流。

(1)Python vs Go語言:優點與缺點

        Python自20世紀80年代就出現了,但直到近些年它才變得流行。事實上,Python受歡迎程度已經連續6年增長,現在是最常用的程式設計語言之一。在Web開發中,它主要用于後端程式設計,但它也用于前端任務。最終,Python在Web開發場景中占優勢的主要原因是它幫助開發人員解決靈活性的迫切需求。它易于學習,簡單易用,有助于快速完成複雜的目标。Python是靈活的,文法也很簡單。

        Go語言現在被認為是Python、Java等傳統語言的替代品,關于Go語言 Web開發與Python、Java的讨論不勝枚舉。

        雖然簡單是Python的主要優點,但也有一些缺點。許多開發人員發現,雖然對于一些簡單和基本的開發Python很實用,但如果要建構更複雜的系統和定制子產品,使用Python可能會變得很複雜。此外,經常出現令人沮喪的編碼錯誤。在HekReNo.com文章中“從Python轉到Go語言的五個原因”Tigran Bayburstyan說:“Python是一個偉大而有趣的語言,但有時你會遇到異常,因為你試圖使用一個變量作為一個整數,但事實證明它是一個字元串。”Go會讓你在編譯時消除這些問題。

        總而言之,在許多用例中,Go語言 Web開發已被證明比使用Python更快地完成同一類任務。最終,Go語言是為那些想要完成任務的人快速而有效地完成任務,而不需要進入程式設計語言的微妙之處。

(2)Python vs Go語言:哪一個更好?

        那麼,Go語言是否會在不久的将來取代Python呢?開發者社群正在讨論兩種程式設計語言的優缺點。如果您正在尋找用于Web程式設計、移動開發、微服務和ERP系統的強大工具,我們相信,您應該切換到Go語言的原因是:

        ①簡單性;

        如果Python是迄今為止最容易學習的程式設計語言,那麼Go語言甚至更簡單。學習Go語言要比學習Python快得多。一些開發人員聲稱Go語言幾乎和JavaScript一樣簡單。

        ②進階編譯能力;

        Go語言是一個編譯執行語言,它能夠直接将代碼編譯成可執行的二級制機器碼。Go語言靜态地将所有依賴庫和子產品編譯到到一個二進制檔案中。你不再需要在伺服器上安裝任何依賴項——你所需要做的就是上傳一個編譯的檔案,你的應用就可以簡單的運作了。

        ③并發和性能;

        Go語言并發模型能夠確定更高的性能(性能甚至 2x、3x的提升)。大多數現代程式設計語言都支援并發,但是Go語言采用了更節省資源的方法。相對于Python,Go語言提供更高性能的goroutine模型來支援多線程,goroutine能夠更加節省CPU和記憶體資源。是以Go語言更有助于降低成本和資源。

        ④架構和庫的本地支援;

        Go語言 sdk包提供了功能豐富的API,是以不用過多的依賴第三方庫就能很好的使用Go語言。當然,如果你需要的話,你可以下載下傳很多工具和架構(Go語言周圍的社群已經很強大很完善了),但是常用的API都已經内置到Go語言核心庫中了。這樣可以加快整個Go語言 Web開發過程的速度,并且使您無需尋找任何第三方依賴。

        ⑤頂級IDE和調試;

        Go語言創作者在建立具有先進調試工具和插件的最先進的內建開發環境方面 做得很好。這可以說是程式設計中最關鍵的方面,因為IDE會嚴重阻礙或加速開發過程。今天,當靈活性給軟體公司帶來競争優勢時,偉大的IDE和調試工具是一個非常重要的優勢。

        ⑥清晰的文法;

        另一個有助于Go語言 Web程式設計出色的簡單性和易用性的是其清晰的文法,它包含零不必要的元件。Go是建立在實用的頭腦中的:而不是必須深入研究語言結構,開發者現在可以自由地專注于開發本身。

        總結,通過上面的對比我們發現,Go語言在各方面基本都已經超過Python,盡管Python社群仍然超過Gophers,Go倡導者的數量每天都在增加,相信Go語言接近并超過Python、Java是大勢所趨。

        有了充分的理由,Go語言證明了“先進”不再等同于複雜、緩慢和昂貴。我們可以在不犧牲品質和大量投資的情況下實作顯著的開發速度。此外,如果你決定使用Go,那麼已經有許多Go語言網絡架構供你選擇。

3.Go語言Web開發常用架構

        Go語言被稱為雲計算時代的C語言,它以其獨特的優勢逐漸被越來越多的公司所關注和使用。為了充分利用Go語言的Web開發優勢,有必要熟悉一下Go語言的Web架構。

(1)Beego (http://beego.me/)

        Beego是一個完全的MVC架構,你可以使用你的Go語言專業技術建構你的web應用程式。Beego 是用Go 語言開發的高效的 HTTP 架構,可以用來快速開發 API、Web應用及後端服務等各種應用。Beego是一個 RESTful 的架構,主要設計靈感來源于 tornado、sinatra 和 flask 這三個架構。它還結合了 Go語言自身的一些特性(接口、結構體嵌入等)。

        1)Beego 架構簡介。

        Beego 是基于多個獨立子產品建構的,是一個高度解耦的架構。最初在設計 Beego 時就考慮到了功能子產品化,使用者即使不适用 Beego 的HTTP邏輯,也可以獨立使用這些子產品(例如可以使用cache子產品來處理的緩存邏輯,使用日志子產品來記錄操作資訊,使用config子產品來解析各種格式的檔案)。

        Beego各子產品的功能,以及使用方法會在接下來逐一介紹。

        2)Beego 執行邏輯。

        既然Beego 是基于子產品建構的,那麼它的執行邏輯是怎麼樣的呢?Beego 是一個典型的MVC架構,其執行邏輯如下圖所示。

Go語言Web程式設計怎麼快速學習,Go語言有哪些優勢,Go Web程式設計有哪些優秀書籍?

                                       圖1

        執行邏輯可以拆分以下幾段:

        ①main檔案監聽啟動端口接收請求。

        ②請求經過路由和參數過濾功能被轉發給綁定URL的控制器處理。

        ③控制器(Controller)調用輔助工具包、Model、Session管理、日志處理、緩存處理子產品進行相應的業務處理。其中,模型(Model)通過ORM直接操作資料庫。

        ④業務處理完成,傳回響應或視圖(View)給請求方。

(2)Gin(https://gin-gonic.github.io/gin/)

        Gin是一個基于 Go 語言編寫的 Web 架構。Gin架構擁有很好的性能,其借助高性能的httprouter,運作速度得到了極大提升。目前的 Gin 架構是1.x版本。

        ①安裝。

        下載下傳并安裝Gin:

$ go get -u github.com/gin-gonic/gin
           

        ②第一個Gin示例。

        安裝完成後,讓我們開啟Gin之旅。

package main              import (                  "github.com/gin-gonic/gin"              )              ​              func main() {                  // 建立一個預設的路由引擎              r := gin.Default()                  // GET:請求方式;/hello:請求的路徑              // 當用戶端以GET方法請求/hello路徑時,會執行後面的匿名函數                  r.GET("/hello", func(c *gin.Context) {                      // c.JSON:傳回JSON格式的資料                      c.JSON(200, gin.H{                          "message": "Hello world!",                      })                  })              ​                  // 啟動HTTP服務,預設在0.0.0.0:8080啟動服務                  r.Run()              }
           

運作以上代碼,然後使用浏覽器打開127.0.0.1:8080/hello即可看到一串JSON字元串。

(3)Revel(http://revel.github.io/)

Revel能讓Go語言的web開發如虎添翼,大大提高你的開發效率。

(4)Martini (http://martini.codegangsta.io)

Martini是一個受到Sinatra (一個Ruby 架構)啟發而開發的Go語言web架構。使用Martini,你可以快速寫你的子產品化應用或者服務。

(5)Traffic(https://github.com/pilu/traffic)

Traffic 同樣也是受Sinatra的regexp/pattern 互斥思想啟發下開發的web架構。它是一個小架構,并且是輕量型的。是以,它具有很好的靈活性,擴充性。

(6)Goji(https://goji.io/)

Goji是一個輕量型的web架構,具有簡約性和靈活性的多路路由請求特性,正如它所标榜自己的那樣。

4.Go語言Web程式設計書籍

(1)《Go Web程式設計實戰派從入門到精通》廖顯東 著 2021年4月出版

Go語言Web程式設計怎麼快速學習,Go語言有哪些優勢,Go Web程式設計有哪些優秀書籍?

        京東購買連結:https://item.jd.com/13200972.html

        當當購買連結:http://product.dangdang.com/29225055.html

        進入京東或者當當,輸入“Go Web程式設計實戰派”購買吧!

       本書采用Go最新版本編寫,拒絕純理論,直接實戰!實戰!實戰!重要的事說3遍!本書聚焦Go Web開發領域,對Go Web知識進行全面深入地講解。貨真價實高品質精品圖書!本書有如下特色:

①一線技術,突出實戰;

本書以實戰為核心,貫穿整本書。所有代碼采用Go最新版本編寫。

②精雕細琢,閱讀性強;

全書的語言經過多次打磨,力求精确。同時注重閱讀體驗,讓沒有任何基礎的讀者也可以很輕松的讀懂書中的知識。

③零基礎入門,循序漸進,實作快速從菜鳥向實戰派高手邁進;

本書以Go入門級程式員為主要對象,初、中、進階程式員都可以從書中學到幹貨。先從Go的基礎學起,然後學習Go核心的技術,再學Go的進階應用,然後再進行項目實戰,最後介紹應用程式的Docker實戰部署。全書從最基礎的知識講解一步一步到最核心的B2C電子商務系實戰開發,真正幫助讀者從基礎入門向開發高手邁進。

④極客思維,極緻效率;

本書以極客思維、深入Go語言底層進行探究,幫助讀者了解背後原理。全書言簡意赅,以幫助讀者提升開發效率為導向,同時盡可能幫助讀者縮短閱讀本書的時間。

⑤由易到難,重難點标注并重點解析;

本書編排由易到難,内容基本覆寫Go Web的主流前沿技術。同時對重難點進行重點講解,對易錯點和注意點進行了提示說明,幫助讀者克服學習過程中的困難。

⑥突出實戰,快速突擊;

本書的執行個體代碼是絕大部分都是來自于最新的企業實戰項目。對于購買本書的讀者,所有的源代碼均可以通過網上下載下傳,直接下載下傳即可運作,讓讀者通過實踐來加深了解。

⑦實戰方案,可直接二次開發進行實戰部署;

本書全書以實戰為主,所有的示例代碼,拿來即可運作。特别是第9章,購買本書的讀者可以直接獲得B2C電子商務系統的全部源代碼。可以直接作為電商項目進行二次開發,用于讀者的項目。讀者購買本書不僅可以學習本書的各種知識,也相當于購買一個最新版的Go語言電商系統解決方案及項目源碼。

(2)《Go Web程式設計》【新加坡】鄭兆雄 著 2017年12月出版

Go語言Web程式設計怎麼快速學習,Go語言有哪些優勢,Go Web程式設計有哪些優秀書籍?

該書的優點:基礎入門,出版較早,對Web的基本原理進行了講解。

該書的缺點:

①太過基礎,并且沒有循序漸進,需要一定Go語言基礎。

②開發例子是國内已經過時的論壇系統,不符合目前市場需求。

③開發的部署是以Heroku、GoogleAppEngine、DigitalOcean等雲平台上部署Go Web應用,不符合國内的具體情況。

④缺乏系統深入的知識體系。

⑤缺乏進階實戰教程及國内大型架構經驗的介紹,無法滿足讀者向進階邁進。

更多精彩盡在“源碼大資料”

Go語言Web程式設計怎麼快速學習,Go語言有哪些優勢,Go Web程式設計有哪些優秀書籍?