幫助讀者使用相關(guān)Go語言資源快速開發(fā)自己的谷歌程序;充分利用Go的輕量級運行和并發(fā)特性一步步展示如何開發(fā)定制應(yīng)用程序;展示后端開發(fā)中的編程過程和功能、詳細示例、代碼示例和節(jié)省時間的技巧。在Windows、Linux或macOS設(shè)備上安裝Go;開始編寫自己的Go應(yīng)用程序;定義變量并在程序中使用變量;使用語句、函數(shù)、循環(huán)和數(shù)組;使用Go模塊簡化程序開發(fā);利用內(nèi)置和第三方軟件包;編寫適合您自己編程需求的定制包;理解經(jīng)典結(jié)構(gòu)和算法;使用Go例程和并發(fā)性提高性能;導(dǎo)入外部代碼即使代碼不是用Go!
(1)我們希望讓使用其他語言的開發(fā)人員更容易過渡到Go的世界。
(2)我們希望您能從其他編程語言和計算機的底層架構(gòu)中有所領(lǐng)悟。這可以幫助您更好地理解Go適合哪些任務(wù),不適合哪些任務(wù),以及它在內(nèi)部是如何工作的,為什么是這樣工作的。
本書旨在使讀者更輕松地使用和理解Go編程語言。Go作為一種編程語言,在構(gòu)建時就考慮到了后端開發(fā)。隨著摩爾定律的終結(jié),更好更快的計算機已經(jīng)不能滿足開發(fā)的需求。因此,我們必須適應(yīng)新常態(tài)大規(guī)模、分布式系統(tǒng)、運行高度優(yōu)化的軟件棧。
這些分布式系統(tǒng)有著完全不同的硬件體系,也使得軟件領(lǐng)域需要進行創(chuàng)新與改變,F(xiàn)代軟件系統(tǒng)正在遠離大型而單一的設(shè)計。相反,它們由許多較小的微服務(wù)組成,支持跨項目的代碼重用和委托所有這些都要求代碼更干凈。
隨著軟件領(lǐng)域的發(fā)展,對支持這種變化的基礎(chǔ)設(shè)施的需求也在增加,從而產(chǎn)生了各種新的編程語言,這些語言是全新的,可以滿足這種需求。Go就是其中一種語言,它具有適合基于微服務(wù)進行軟件開發(fā)的特性,如較快的編譯速度、較小的二進制文件和良好的可移植性。Go還有一些其獨有的特性,例如Goroutine(并發(fā)執(zhí)行的活動)和Channel(活動之間的連接),它們可以實現(xiàn)強大且易于使用的并發(fā)程序。
Go是后端開發(fā)中許多基礎(chǔ)服務(wù)背后的引擎,例如Kubernetes、Docker、etcd、CockroachDB等。通過使用這些主流工具已經(jīng)內(nèi)置的相同語言,代碼會更相似,并可以更好地使用基于企業(yè)級后端開發(fā)的開放源碼的大型生態(tài)系統(tǒng)。
通過本書,我們希望讀者能成為Go開發(fā)者,這樣他們就可以利用Go作為解決問題的一個工具。但Go不僅僅是一種工具,它更是一種可以解決企業(yè)級問題的工具。因此,Go是編寫代碼的首選語言。
我們的目標(biāo)不僅僅是教授Go語言,而是教授一種方法。在每一步中,都將Go與用于類似任務(wù)的其他主流編程語言(如Swift、C、Python和Java)進行比較,甚至深入到操作系統(tǒng)和CPU級別,從而展示這些語言是如何與計算機的硬件和軟件交互的。這樣做的目的有兩點:
(1) 我們希望幫助使用其他語言的開發(fā)人員可以更容易地過渡到使用Go語言。
(2) 我們希望幫助讀者更好地理解Go適合哪些任務(wù),不適合哪些任務(wù),以及它在內(nèi)部是如何工作的和為什么是這樣工作的。
著者
2024年2月
第1章為什么使用Go1
1.1Go的設(shè)計目標(biāo)2
1.2Go的使用平臺3
1.3Go的編譯器和運行時4
1.4并發(fā)性6第2章快速入門9
2.1安裝Go10
2.1.1使用系統(tǒng)包管理器安裝Go10
2.1.2安裝預(yù)編譯的二進制文件10
2.1.3從源碼中安裝Go12
2.2Go的基本概念13
2.2.1常規(guī)項目結(jié)構(gòu)13
2.2.2第一個Go程序Hello, World!15
2.2.3變量17
2.2.4if語句和switch語句24
2.2.5循環(huán)28
2.2.6函數(shù)33
2.2.7結(jié)構(gòu)體45
2.2.8接口51
2.2.9錯誤55第3章Go模塊61
3.1使用內(nèi)置包62
3.2使用第三方包73
3.3構(gòu)建自己的包77第4章使用內(nèi)置包83
4.1常見的數(shù)據(jù)結(jié)構(gòu)和算法84
4.2Dijkstra路徑查找算法84
4.3康威生命游戲102
4.4工作量證明116第5章并發(fā)127
5.1并發(fā)、線程和并行128
5.2Goroutine(Go協(xié)程)130
5.3通道133
5.4工作量證明: 第2部分150第6章互操作性161
6.1為什么互操作性很重要162
6.2與C代碼的互操作165
6.3與Swift的互操作176