最近幾年,國內(nèi)一線大廠都在積極轉(zhuǎn) Go,比如騰訊、阿里、華為和百度等等。甚至有不少團(tuán)隊(duì),所有項(xiàng)目都是用 Go 構(gòu)建的。所以,各個公司對 Go 研發(fā)工程師的需求越來越旺盛。
在我看來, Go 語言之所以火熱,主要有兩方面原因:一方面,Go 本身就是一門非常優(yōu)秀的語言,有很多核心優(yōu)勢;另一方面,Go 是云時代的語言。
隨著云計算平臺的逐漸成熟,應(yīng)用上云已經(jīng)成為不可逆轉(zhuǎn)的趨勢,很多公司都選擇將基礎(chǔ)架構(gòu)/業(yè)務(wù)架構(gòu)云化,甚至所有技術(shù)都圍繞云來構(gòu)建。從下面這張?jiān)圃夹g(shù)棧語言組成圖中,不難發(fā)現(xiàn),有 63% 的具有統(tǒng)治力的云原生項(xiàng)目都是用 Go 構(gòu)建的。
完整的云原生技術(shù)棧可參考: 云原生技術(shù)圖譜因此,把基礎(chǔ)架構(gòu)/業(yè)務(wù)架構(gòu)云化,離不開對云原生開源項(xiàng)目的學(xué)習(xí)、改造。最好的方式就是將整個團(tuán)隊(duì)的語言技術(shù)棧 All In Go,這也是 Go 的重要性之一。
但我發(fā)現(xiàn),很多開發(fā)者用 Go 進(jìn)行項(xiàng)目開發(fā)時,都會遇到不少問題,比如寫的代碼依賴數(shù)據(jù)庫連接,沒法寫單元測試;開發(fā)的項(xiàng)目很難維護(hù),項(xiàng)目中有大量不符合 Go 設(shè)計哲學(xué)的 “包 ”等等。 除此之外,類似的問題還有不少,總結(jié)起來主要是以下幾個方面:學(xué)不到最佳實(shí)踐,能力提升有限:網(wǎng)上有很多介紹 Go 項(xiàng)目的構(gòu)建方法,但大多并非最佳實(shí)踐,學(xué)完也無法為能力和認(rèn)知帶來提升。
不懂如何從 0 到 1 開發(fā)一個 Go 項(xiàng)目:對 Go 開發(fā)的知識點(diǎn)和構(gòu)建方法,掌握不夠全面和深入,無法建立起有機(jī)的 Go 項(xiàng)目研發(fā)體系,落地到開發(fā)階段,效率非常低下。
缺乏一線項(xiàng)目練手,難以檢驗(yàn)學(xué)習(xí)效果:平常接觸不到一線大廠的大型項(xiàng)目構(gòu)建方法和研發(fā)經(jīng)驗(yàn),缺乏學(xué)習(xí)途徑。
這里,分享給你一張圖譜,涵蓋了 Go 項(xiàng)目開發(fā)中大部分技能點(diǎn),內(nèi)容是按開發(fā)順序排列的,如果這些技能點(diǎn)你都能掌握,上面的那些就不成問題了:這張圖出自孔令飛,他是騰訊云資深工程師,前 Red Hat、聯(lián)想云工程師,目前專注于云原生混合云領(lǐng)域的基礎(chǔ)架構(gòu)開發(fā)。他有多年 Go 項(xiàng)目開發(fā)經(jīng)驗(yàn),曾參與騰訊云云函數(shù) SCF、騰訊云容器服務(wù) TKE、騰訊游戲容器平臺 TenC、騰訊游戲微服務(wù)中臺等項(xiàng)目。此外,也有大規(guī)模 Kubernetes 集群、微服務(wù)的研發(fā)和架構(gòu)經(jīng)驗(yàn),以及 Red Hat 和聯(lián)想云 Xen/KVM 的研發(fā)經(jīng)驗(yàn),對微服務(wù)、虛擬化、Kubernetes/Docker、Serverless 等云計算相關(guān)技術(shù)較深層次的理解。最近,他的專欄《Go 語言項(xiàng)目開發(fā)實(shí)戰(zhàn)》剛剛上線,在專欄中,他詳細(xì)講解 Go 項(xiàng)目開發(fā)的 5 大核心流程,為你交付一套可執(zhí)行、可復(fù)用的企業(yè)應(yīng)用代碼,和一線企業(yè)應(yīng)用的最佳實(shí)踐方式,通過企業(yè)級的實(shí)戰(zhàn)項(xiàng)目,帶你一次性掌握 Go 項(xiàng)目開發(fā)的常用技能點(diǎn),解決開發(fā)中面臨的各類問題。說實(shí)話,之前類似的課程和資料也看了不少,但像這種帶你從 0 到 1 搭建一個完整企業(yè)級實(shí)戰(zhàn)項(xiàng)目的,還是頭一個。而且課程剛上線,優(yōu)惠力度挺大的,這里推薦給你。專欄圍繞一個可部署、可運(yùn)行的企業(yè)應(yīng)用源碼展開,講解開發(fā)流程涉及的知識和技能點(diǎn)——一方面讓你從全局視野俯瞰整個 Go 企業(yè)應(yīng)用開發(fā)流程,知道一個優(yōu)秀企業(yè)應(yīng)用涉及的技能點(diǎn)和開發(fā)工作,以及如何高效完成每個階段的開發(fā)工作;另一方面,你可以深入每個技能點(diǎn),掌握它們的具體構(gòu)建方法、一線開發(fā)經(jīng)驗(yàn)和業(yè)界最佳實(shí)踐。最終,他會交付給你一套優(yōu)秀、可運(yùn)行的企業(yè)應(yīng)用代碼,這套代碼能滿足大部分的企業(yè)應(yīng)用開發(fā)場景,你可以基于它做二次開發(fā),快速構(gòu)建起你的企業(yè)應(yīng)用。詳細(xì)說來,專欄分為 6 個模塊,模塊 1 是實(shí)戰(zhàn)環(huán)境準(zhǔn)備,模塊 2~6 會帶你按照研發(fā)流程來實(shí)際構(gòu)建一個應(yīng)用:實(shí)戰(zhàn)準(zhǔn)備:手把手帶你準(zhǔn)備一個實(shí)驗(yàn)環(huán)境,部署實(shí)戰(zhàn)項(xiàng)目,在加深你對實(shí)戰(zhàn)項(xiàng)目理解的同時,為你講解部署的技能點(diǎn),包括如何準(zhǔn)備開發(fā)環(huán)境、制作 CA 證書、安裝和配置用到的數(shù)據(jù)庫,安裝應(yīng)用,Shell 腳本編寫技巧等。實(shí)戰(zhàn)第 1 站:規(guī)范設(shè)計,詳細(xì)介紹開發(fā)中的 10 大常見的規(guī)范,例如目錄規(guī)范、日志規(guī)范、錯誤碼規(guī)范、Commit 規(guī)范等,帶你掌握設(shè)計常見規(guī)范的方法,為高效開發(fā)一個高質(zhì)量、易閱讀、易維護(hù)的 Go 應(yīng)用打好基礎(chǔ)。實(shí)戰(zhàn)第 2 站:基礎(chǔ)功能設(shè)計或開發(fā),教你設(shè)計和開發(fā) Go 應(yīng)用開發(fā)中的基礎(chǔ)功能,這些功能會影響整個應(yīng)用的構(gòu)建方式,例如日志包、錯誤包、錯誤碼等。實(shí)戰(zhàn)第 3 站:服務(wù)開發(fā),帶你解析一個企業(yè)級的 Go 項(xiàng)目代碼,進(jìn)而學(xué)會如何開發(fā) Go 應(yīng)用。同時,詳細(xì)講解 Go 開發(fā)階段的各個技能點(diǎn),例如如何設(shè)計和開發(fā) API 服務(wù)、Go SDK、客戶端工具、錯誤碼、日志包等。實(shí)戰(zhàn)第 4 站:服務(wù)測試。這個模塊圍繞實(shí)戰(zhàn)項(xiàng)目,講解單元測試、功能測試、性能分析和性能調(diào)優(yōu)的方法,交付給你一個性能和穩(wěn)定性都經(jīng)過充分測試、生產(chǎn)級可用的服務(wù)。實(shí)戰(zhàn)第 5 站:服務(wù)部署。通過實(shí)戰(zhàn)項(xiàng)目的部署,告訴你如何部署一個高可用、安全、具備容災(zāi)能力,又可以輕松水平擴(kuò)展的企業(yè)應(yīng)用。這里,我會重點(diǎn)介紹 2 種部署方式:傳統(tǒng)部署方式和容器化部署方式,每種方式在部署方法、復(fù)雜度和能力上都有所不同。特別要說的是,專欄中的每個技能點(diǎn)都盡可能朝著“最佳實(shí)踐”的方向設(shè)計。例如:使用的 Go 包都是業(yè)界采納度最高的包,設(shè)計時盡可能遵循 Go 設(shè)計模式、Go 開發(fā)規(guī)范、Go 最佳實(shí)踐、go clean architecture 等等。同時,他還會把自己做一線 Go 項(xiàng)目研發(fā)的經(jīng)驗(yàn),融合到講解的過程中,給你最靠譜的建議,別的不說,這些經(jīng)驗(yàn)和建議絕對可以讓你在構(gòu)建應(yīng)用的過程中,少走很多彎路。