全書共分21章。分為四篇進(jìn)行介紹:語言基礎(chǔ)篇、語言進(jìn)階篇、微服務(wù)知識篇、微服務(wù)實戰(zhàn)篇。
第 一篇包括6章:Go程序基礎(chǔ)、基本數(shù)據(jù)類型、字符串及復(fù)合數(shù)據(jù)類型、函數(shù)、方法、接口及反射、并發(fā)。通過本篇的開發(fā),可以讓不是很熟悉Go語言的工程師掌握語法基礎(chǔ)。
第二篇包括3章:Go Web編程、并發(fā)編程模式、分布式系統(tǒng)。通過本篇的學(xué)習(xí)可以讓讀者了解使用Go語言如何進(jìn)行Web開發(fā)、Go并發(fā)模式如何設(shè)計、分布式系統(tǒng)使用Go如何設(shè)計。
第三篇包括5章:微服務(wù)介紹、Linux基礎(chǔ)、Docker、Kubernetes、Go常用微服務(wù)框架。本篇是用Go進(jìn)行微服務(wù)開發(fā)的基本知識儲備,知識面教光,避免讀者查閱多本資料,整篇學(xué)習(xí)完就可以達(dá)到微服務(wù)開發(fā)的技能入門水平。
第四篇包括7章:生產(chǎn)環(huán)境Docker及Kubernetes安裝、基于Docker及Goland的開發(fā)測試環(huán)境搭建、測試驅(qū)動開發(fā)和IM系統(tǒng)核心功能的微服務(wù)化、持續(xù)化交付、事件驅(qū)動架構(gòu)、日志和監(jiān)控、安全。本篇是微服務(wù)實戰(zhàn),以IM系統(tǒng)為例,從系統(tǒng)安裝、如何測試、如何迭代、如何運維都進(jìn)行了介紹。
當(dāng)今世界,軟件的規(guī)模越來越大、功能越來越復(fù)雜,研發(fā)團隊的規(guī)模也變得越來越大,運維人員和研發(fā)人員之間的工作交集越來越多。在這個大前提下,微服務(wù)模式在大型項目中開始風(fēng)靡。
本書對使用Go語言進(jìn)行微服務(wù)開發(fā)做了全面細(xì)致的介紹,包括微服務(wù)的基礎(chǔ)知識、微服務(wù)的拆分、微服務(wù)進(jìn)程間通信(IPC)、微服務(wù)的分布式事務(wù)管理、領(lǐng)域驅(qū)動設(shè)計(DDD)、微服務(wù)中的測試、基于ES-CQRS的微服務(wù)實踐、微服務(wù)生產(chǎn)環(huán)境和持續(xù)交付等。本書比較全面地對微服務(wù)進(jìn)行了介紹,而且對于每個知識點都給出了技術(shù)實現(xiàn)和實例代碼,比如微服務(wù)進(jìn)程間通信部分重點介紹了gRPC,ES-CQRS部分則給出了Go語言的具體實現(xiàn)。在介紹完知識點之后,本書給出了一些綜合性的案例,比如第10章、第22章等,并通過GitHub提供了完整的可運行的代碼,可幫助有基本Go語言語法知識的讀者盡快了解、掌握微服務(wù)模式。
不同的語言對于微服務(wù)的實現(xiàn)都不相同。為了讓讀者更深入地了解Go語言的微服務(wù)實現(xiàn)模式,本書前6章深入介紹了Go語言的語法知識,包括Go語言程序基礎(chǔ),基本數(shù)據(jù)類型,字符串與復(fù)合數(shù)據(jù)類型,函數(shù)、方法、接口和反射,并發(fā)編程,包和代碼測試等。對于已經(jīng)熟練掌握Go語言的讀者來說,前6章可以略過,或者快速瀏覽一遍。
本書目的
本書是為Go語言開發(fā)者和希望進(jìn)入Go微服務(wù)開發(fā)領(lǐng)域的讀者準(zhǔn)備的,它不是一本僅介紹微服務(wù)的書,有一半的篇幅是在介紹Go語言的知識,所以特別適合有Java、Python等其他編程基礎(chǔ)而希望轉(zhuǎn)到Go語言編程的讀者閱讀。
本書除了詳細(xì)地介紹相應(yīng)的理論知識以外,還配備了示例代碼,所有代碼均已在GitHub上開源,讀者可以邊讀書邊實踐。希望通過這種方式讓更多的工程師受益,幫助他們將所學(xué)知識盡快轉(zhuǎn)化為生產(chǎn)力。
本書內(nèi)容
本書分為四個部分,完整涵蓋了從Go語言到微服務(wù)的各個方面。每一部分都提供了示例代碼或?qū)崙?zhàn)項目,讀者可以邊學(xué)習(xí)邊動手練習(xí)。
第一部分是Go語言基礎(chǔ)(第1~7章),包括Go語言的基礎(chǔ)語法、Go語言的基本特性和Go語言的實戰(zhàn)項目。Go語言的基礎(chǔ)語法部分包括變量、基本數(shù)據(jù)類型、垃圾回收機制、字符串和復(fù)合類型等。對于字符串的介紹,重點講解了Go語言字符串的特點及存儲方式。另外,第一部分還介紹了Go語言里的slice如何存儲、如何操作。Go語言對slice的使用非常頻繁,而struct是在Go語言沒有類的情況下對封裝的具體體現(xiàn),struct是數(shù)據(jù)類型的核心。Go語言的基本特性部分包括Go語言的基本函數(shù)、方法、接口、反射及并發(fā)等內(nèi)容。Go語言沒有類,它如何實現(xiàn)面向?qū)ο蟮闹T多特性呢?比如封裝、多態(tài)等。函數(shù)和goroutine相結(jié)合又會出現(xiàn)什么情況?讀者學(xué)習(xí)本部分內(nèi)容后對Go語言的靈活性會有所理解。Go語言的并發(fā)通過goroutine和channel實現(xiàn),語法很簡單,但理論知識需要清楚理解。Go語言的實戰(zhàn)項目部分主要介紹了Go語言自帶的測試工具和一個實戰(zhàn)項目。這個模擬項目對本部分前面的知識進(jìn)行了總結(jié)和復(fù)習(xí)。
第二部分是Go語言進(jìn)階(第8~10章),主要內(nèi)容是Go語言的并發(fā)編程進(jìn)階、Go語言的Web編程以及綜合實戰(zhàn)。并發(fā)編程進(jìn)階及Web編程部分分別介紹了可以承擔(dān)高負(fù)載的線程池實現(xiàn)以及Go語言里的Web編程。Go語言的并發(fā)性能非常強,只要把goroutine用好,結(jié)合設(shè)計模式,就可以設(shè)計出優(yōu)秀的高并發(fā)服務(wù)。而Go語言的Web編程就更為方便,甚至只使用標(biāo)準(zhǔn)模塊就可以寫出Web程序。另外,本部分還會介紹一個綜合案例,不僅對第一部分及第二部分所學(xué)的知識進(jìn)行總結(jié)和復(fù)習(xí),同時還介紹了Web編程常用的gin框架。
第三部分是微服務(wù)理論(第11~18章),主要內(nèi)容包括微服務(wù)模式的理論基礎(chǔ)、微服務(wù)的進(jìn)程間通信、微服務(wù)的分布式事務(wù)管理、領(lǐng)域驅(qū)動設(shè)計(DDD)、微服務(wù)測試、Docker及ES-CQRS策略。在微服務(wù)模式的理論基礎(chǔ)部分,詳細(xì)介紹了各種模式的演變,并且給出了具體的示例代碼。進(jìn)程間通信部分主要介紹了Go語言中的常用進(jìn)程通信方式—protobuf、gRPC和consul,是微服務(wù)的技術(shù)入門。在微服務(wù)的分布式事務(wù)管理部分對分布式事務(wù)管理的方式進(jìn)行了探討,對不同拆分方式的優(yōu)缺點進(jìn)行了對比,其中重點介紹了Saga,并且給出了代碼實現(xiàn)。領(lǐng)域驅(qū)動設(shè)計(DDD)部分介紹了其在Go語言中的實現(xiàn),并給出了相關(guān)的概念,比如聚合、聚合的模式,此外,還展示了一個模擬實現(xiàn)。微服務(wù)測試部分介紹了測試的基本方法,建議結(jié)合第一部分中Go代碼測試進(jìn)行閱讀。Docker部分重點介紹了Docker的基本原理及使用方法。Docker一般是由運維人員操作的,不過工程師也需要對Docker有一定的了解,以便于開發(fā)微服務(wù)。最后,本部分介紹了微服務(wù)中的知名策略—ES-CQRS在Go語言中的實現(xiàn)。
第四部分是微服務(wù)實戰(zhàn)(第19~22章),包括微服務(wù)的生產(chǎn)環(huán)境、日志和監(jiān)控、持續(xù)交付、實戰(zhàn)項目。生產(chǎn)環(huán)境部分重點介紹了生產(chǎn)環(huán)境的安全,以及應(yīng)用、運維和外部安全等內(nèi)容,這是工程師在實戰(zhàn)中必須了解的知識。日志和監(jiān)控是微服務(wù)開發(fā)必須關(guān)注的內(nèi)容,一旦微服務(wù)處于運行狀態(tài),工程師就可以通過日志和監(jiān)控工具來診斷服務(wù)。持續(xù)交付,或者說DevOps,是微服務(wù)開發(fā)和部署過程中必不可少的知識領(lǐng)域,它是一個非常大的話題,本書站在Go語言的