如何從 0 開始搭建一個企業級 Go 應用?

blank

如何從 0 開始搭建一個企業級 Go 應用?

你好,我是孔令飛,很高興能在這裡和你聊聊如何用 Go 構建企業級應用。

在過去的 5 年裡,我一直在騰訊使用 Go 做大型企業級專案。 比如說,騰訊雲雲函數 SCF、騰訊遊戲容器平臺 TenC、騰訊遊戲微服務中台等。 目前,我在騰訊雲負責容器服務 TKE 的相關研發工作,專注於雲原生混合雲領域的基礎架構開發。

"雲"是大勢所趨,而Go是雲時代的語言

最近幾年,我發現騰訊很多團隊的開發語言都在轉 Go。 其實,不光騰訊,像阿里、華為和百度這類國內一線大廠也都在積極轉 Go。 甚至不少團隊,所有專案都是用 Go 構建的。 伴隨而來的,就是各個公司對Go研發工程師的需求越來越旺盛。 那麼, Go 為什麼會變得這麼火熱呢? 我認為,原因主要有兩個方面。

一方面,Go 是一門非常優秀的語言,它具有很多核心優勢,例如:語言簡單、語言層面支援併發程式設計、跨平臺編譯和自帶垃圾回收機制等,這些優勢是這些團隊選擇 Go 最根本的原因。

另一方面,也因為 Go 是雲時代的語言。 為什麼這麼說呢? 下面,我來詳細說說。

隨著雲計算平台的逐漸成熟,應用上雲已經成為一個不可逆轉的趨勢了,很多公司都選擇將基礎架構/業務架構雲化,例如阿裡、騰訊都在將公司內部業務全面雲化。 可以說,全面雲化已經是公司層面的核心 KPI了,我們甚至可以理解為以後所有的技術都會圍繞著雲來構建。

而雲目前是朝著雲原生架構的方向演進的,雲原生架構中具有統治力(影響力)的專案絕大部分又是用 Go 構建的。 我們從下面這張雲原生技術棧語言組成圖中可以看到,有63%的具有統治力的雲原生專案都是用Go來構建的。

blank

[reference_begin]完整的雲原生技術棧可參考雲原生技術圖譜[reference_end]

因此,想要把基礎架構/業務架構雲化,離不開對這些雲原生開源項目的學習、改造。 而一個團隊為了節省成本,技術棧最好統一。 既然我們一定要會 Go,而且 Go 這麼優秀,那最好的方式就是將整個團隊的語言技術棧 all in Go,這也是 Go 為什麼重要的另一個原因了。

那麼,我們用 Go 做什麼呢,當然是項目開發。 但很多開發者在用 Go 進行專案開發時會面臨一系列問題。

學習 Go 專案開發面臨哪些問題?

我帶過不少剛接觸 Go 語言的開發者,他們為了學習 Go 項目開發,會上網搜很多 Go 相關的技術文章,也確實花了很多時間去學習。 但是,當我做 Code Review 時,發現他們開發的代碼仍然存在很多問題。

比如說,有個開發者寫的代碼依賴資料庫連接,沒法寫單元測試。 細問之後,我發現他參考的文章沒有將資料庫層跟業務層通過介面解耦。

再比如說,還有一些開發者開發的專案很難維護,專案中出現了大量的 common、util、const 這類 Go 包。 只看包名,我完全不知道包所實現的功能,問了之後才發現他是參考了一個帶有 dao、model、controller、service 目錄的、不符合 Go 設計哲學的專案。

而這些問題其實只是冰山一角,總的來說,我們在學習 Go 項目開發時會面臨以下4大類問題。

  1. 知識盲區:Go 項目開發會涉及很多知識點,但自己對這些知識點卻一無所知。 想要學習,卻發現網上很多文章結構混亂、講解不透徹。 想要搜索一遍優秀的文章,又要花費很多時間,勞神勞力。

  1. 學不到最佳實踐,能力提升有限:網上有很多文章會介紹Go專案的構建方法,但很多都不是最佳實踐,學完之後不能在能力和認知上帶來最佳提升,還要自己花時間整理學習,事倍功半。

  1. 不知道如何完整地開發一個 Go 專案:學了很多 Go 開發相關的知識點、構建方法,但都不體系、不全面、不深入。 學完之後,自己並不能把它們有機結合成一個 Go 項目研發體系,真正開發的時候還是一團亂,效率也很低。

  1. 缺乏一線項目練手,很難檢驗學習效果:為了避免閉門造車,我們肯定想學習一線大廠的大型專案構建和研發經驗,來檢驗自己的學習成果,但自己平時又很難接觸到,沒有這樣的學習途徑。

為了解決這些問題,我設計了《Go 語言專案開發實戰》這個專欄,希望説明你成為一名優秀的Go開發者,在職場中建立自己的核心競爭力。

新人首單 ¥59.9,原價 ¥129

這個專欄是如何設計的?

《Go 語言專案開發實戰》這個專欄又是如何解決上述問題的呢? 在這個專欄里,我會圍繞一個可部署、可運行的企業應用源碼,為你詳細講解實際開發流程中會涉及的技能點,讓你徹底學會如何構建企業級 Go 應用,並解決 Go 專案開發所面臨的各類問題。

一方面,你能夠從比較高的視野俯瞰整個 Go 企業應用開發流程,不僅知道一個優秀的企業應用涉及的技能點和開發工作,還能知道如何高效地完成每個階段的開發工作。 另一方面,你能夠深入到每個技能點,掌握它們的具體構建方法、業界的最佳實踐和一線開發經驗。

最後我還想強調一點,除了以上內容,專欄最終還會交付給你一套優秀、可運行的企業應用代碼。 這套代碼能夠滿足絕大部分的企業應用開發場景,你可以基於它做二次開發,快速構建起你的企業應用。

說了這麼多,我們到底能學到哪些技能點呢? 我按照開發順序把它們總結在下面這張圖中,圖中包含了Go項目開發中大部分技能點。

blank

除此之外,專欄中的每個技能點我都會盡可能朝著「最佳實踐」的方向去設計。 例如,我使用的 Go 包都是業界採納度最高的包,而且設計時,我也會盡可能遵循 Go 設計模式、Go 開發規範、Go 最佳實踐、go clean architecture 等。 同時,我也會盡量把我自己做一線Go專案研發的經驗,融合到講解的過程中,給你最靠譜的建議,這些經驗和建議可以讓你在構建應用的過程中,少走很多彎路。

為了讓你更好地學習這門課程,我把整個專欄劃分為了6個模組。 其中,第1個模組是實戰環境準備,第2到第6個模組我會帶著你按照研發的流程來實際構建一個應用。

實戰準備:我會先手把手帶你準備一個實驗環境,再帶你部署我們的實戰專案。 加深你對實戰專案的理解的同時,給你講解一些部署的技能點,包括如何準備開發環境、製作CA證書,安裝和配置用到的資料庫、應用,以及Shell腳本編寫技巧等。

實戰第 1 站:規範設計:我會詳細介紹開發中常見的10大規範,例如目錄規範、日誌規範、錯誤碼規範、Commit規範等。 通過本模組,你能夠學會如何設計常見的規範,為高效開發一個高品質、易閱讀、易維護的 Go 應用打好基礎。

實戰第 2 站:基礎功能設計或開發:我會教你設計或開發一些Go應用開發中的基礎功能,這些功能會影響整個應用的構建方式,例如日誌包、錯誤包、錯誤碼等。

實戰第 3 站:服務開發:我會帶你一起解析一個企業級的Go專案代碼,讓你學會如何開發Go應用。 在解析的過程中,我也會詳細講解Go開發階段的各個技能點,例如怎麼設計和開發API服務、Go SDK、用戶端工具等。

實戰第 4 站:服務測試:我會圍繞實戰專案來講解進行單元測試、功能測試、性能分析和性能調優的方法,最終讓你交付一個性能和穩定性都經過充分測試的、生產級可用的服務。

實戰第 5 站:服務部署:本模塊通過實戰專案的部署,來告訴你如何部署一個高可用、安全、具備容災能力,又可以輕鬆水準擴展的企業應用。 這裡,我會重點介紹 2 種部署方式:傳統部署方式和容器化部署方式,每種方式在部署方法、複雜度和能力上都有所不同。

新人首單 ¥59.9,原價 ¥129

最後,關於怎麼學習這個專欄,我還想給你一些建議。

第一,我建議你先學習這個專欄的圖文內容,再詳細去讀源碼。 學習過程中如果產生一些想法可以通過修改代碼,並查看運行結果的方式來加以驗證。 這個專欄的代碼,我都放在GitHub上,你可以點擊這個連結查看。

第二,在專欄中,我不會詳細去介紹每行代碼,只會挑選一些核心代碼來講。 一些沒有講到的地方,如果有疑問,你一定要在評論區留言,因為這個專欄我就是要帶你攻克開發過程中的所有難題,千萬不要讓小問題積攢成大難題,那真的得不償失。 我可以承諾的是,留言回復可能會遲到,但絕不會缺席。

好啦,從現在開始,讓我們一起開啟這場充滿挑戰的Go項目實戰旅途,為真正開發出一個優秀的企業級Go應用,成為一個Go資深開發者,一起努力吧!

What do you think?

Written by marketer

blank

火了! 推薦 10 個低代碼 GitHub 專案

blank

歷時大半年,Github團隊成功減少30kb依賴體積