- Go語言精進之路:從新手到高手的編程思想、方法和技巧(2)
- 白明
- 2392字
- 2022-01-04 17:42:17
前言
為什么要寫本書
Go是Google三位大師級人物Robert Griesemer、Rob Pike及Ken Thompson共同設(shè)計的一種靜態(tài)類型、編譯型編程語言。它于2009年11月正式開源,一經(jīng)面世就憑借語法簡單、原生支持并發(fā)、標準庫強大、工具鏈豐富等優(yōu)點吸引了大量開發(fā)者。經(jīng)過十余年演進和發(fā)展,Go如今已成為主流云原生編程語言,很多云原生時代的殺手級平臺、中間件、協(xié)議和應(yīng)用都是采用Go語言開發(fā)的,比如Docker、Kubernetes、以太坊、Hyperledger Fabric超級賬本、新一代互聯(lián)網(wǎng)基礎(chǔ)設(shè)施協(xié)議IPFS等。
Go是一門特別容易入門的編程語言,無論是剛出校門的新手還是從其他編程語言轉(zhuǎn)過來的老手,都可以在短時間內(nèi)快速掌握Go語法并編寫Go代碼。但很多Go初學(xué)者的疑問是:Go入門容易,但精進難,怎么才能像Go開發(fā)團隊那樣寫出符合Go思維和語言慣例的高質(zhì)量代碼呢?這個問題引發(fā)了我的思考。在2017年GopherChina大會上,我以演講的形式初次嘗試回答這個問題,但鑒于演講的時長有限,很多內(nèi)容沒能展開,效果不甚理想。而本書正是我對解答這個問題所做出的第二次嘗試。
我這次解答的思路有兩個。
- 思維層面:寫出高質(zhì)量Go代碼的前提是思維方式的進階,即用Go語言的思維寫Go代碼。
- 實踐技巧層面:Go標準庫和優(yōu)秀Go開源庫是挖掘符合Go慣用法的高質(zhì)量Go代碼的寶庫,對其進行閱讀、整理和歸納,可以得到一些能夠幫助我們快速進階的有效實踐。
本書正是基于以上思路為想實現(xiàn)Go精進但又不知從何入手的你而寫的。
首屆圖靈獎得主、著名計算機科學(xué)家Alan J. Perlis曾說過:“不能影響到你的編程思維方式的編程語言不值得學(xué)習(xí)和使用?!庇纱丝梢娋幊趟季S對編程語言學(xué)習(xí)和應(yīng)用的重要性。只有真正領(lǐng)悟了一門編程語言的設(shè)計哲學(xué)和編程思維,并將其應(yīng)用到日常編程當(dāng)中,你才算真正精通了這門編程語言。
因此,本書將首先帶領(lǐng)大家回顧Go語言的演進歷程,一起了解Go語言設(shè)計者在設(shè)計Go語言時的所思所想,與他們產(chǎn)生思維上的共鳴,深刻體會那些看似隨意實則經(jīng)過深思熟慮的設(shè)計。
接下來,本書將基于對Go開發(fā)團隊、Go社區(qū)高質(zhì)量代碼的分析與歸納,從項目結(jié)構(gòu)和代碼風(fēng)格、基礎(chǔ)語法、函數(shù)、方法、接口、并發(fā)、錯誤處理、測試與性能優(yōu)化、標準庫、工具鏈等多個方面,給出改善Go代碼質(zhì)量、寫出符合Go思維和慣例的代碼的箴言。
學(xué)習(xí)了本書中的這些箴言,你將擁有和Go專家一樣的Go編程思維,寫出符合Go慣例風(fēng)格的高質(zhì)量Go代碼,從眾多Go初學(xué)者中脫穎而出,快速實現(xiàn)從Go編程新手到專家的轉(zhuǎn)變!
讀者對象
本書主要適合以下人員閱讀:
- 迫切希望在Go語言上精進并上升到新層次的Go語言初學(xué)者;
- 希望寫出更符合Go慣用法的高質(zhì)量代碼的Go語言開發(fā)者;
- 有Go語言面試需求的在校生或Go語言求職者;
- 已掌握其他編程語言且希望深入學(xué)習(xí)Go語言的開發(fā)者。
本書特色
本書的特色可以概括為以下幾點。
- 進階必備:精心總結(jié)的編程箴言助你掌握高效Go程序設(shè)計之道。
- 高屋建瓴:Go設(shè)計哲學(xué)與編程思想先行。
- 深入淺出:原理深入,例子簡明,講解透徹。
- 圖文并茂:大量圖表輔助學(xué)習(xí),重點、難點輕松掌控。
如何閱讀本書
本書內(nèi)容共分為十部分,限于篇幅,分為兩冊出版,即《Go語言精進之路:從新手到高手的編程思想、方法和技巧1》和《Go語言精進之路:從新手到高手的編程思想、方法和技巧2》。其中,第1冊包含第一~七部分,第2冊包含第八~十部分。
- 第一部分 熟知Go語言的一切
本部分將帶領(lǐng)讀者穿越時空,回顧歷史,詳細了解Go語言的誕生、演進以及發(fā)展現(xiàn)狀。通過歸納總結(jié)Go語言的設(shè)計哲學(xué)和原生編程思維,讓讀者站在語言設(shè)計者的高度理解Go語言與眾不同的設(shè)計,認同Go語言的設(shè)計理念。
- 第二部分 項目結(jié)構(gòu)、代碼風(fēng)格與標識符命名
每種編程語言都有自己慣用的代碼風(fēng)格,而遵循語言慣用風(fēng)格是編寫高質(zhì)量Go代碼的必要條件。本部分詳細介紹了得到公認且廣泛使用的Go項目的結(jié)構(gòu)布局、代碼風(fēng)格標準、標識符命名慣例等。
- 第三部分 聲明、類型、語句與控制結(jié)構(gòu)
本部分詳述基礎(chǔ)語法層面高質(zhì)量Go代碼的慣用法和有效實踐,涵蓋無類型常量的作用、定義Go的枚舉常量、零值可用類型的意義、切片原理以及高效的原因、Go包導(dǎo)入路徑的真正含義等。
- 第四部分 函數(shù)與方法
函數(shù)和方法是Go程序的基本組成單元。本部分聚焦于函數(shù)與方法的設(shè)計和實現(xiàn),涵蓋init函數(shù)的使用、躋身“一等公民”行列的函數(shù)有何不同、Go方法的本質(zhì)等。
- 第五部分 接口
接口是Go語言中的“魔法師”。本部分聚焦于接口,涵蓋接口的設(shè)計慣例、使用接口類型的注意事項以及接口類型對代碼可測試性的影響等。
- 第六部分 并發(fā)編程
Go以其輕量級的并發(fā)模型而聞名。本部分詳細介紹Go基本執(zhí)行單元——goroutine的調(diào)度原理、Go并發(fā)模型以及常見并發(fā)模式、Go支持并發(fā)的原生類型——channel的慣用模式等內(nèi)容。
- 第七部分 錯誤處理
Go語言十分重視錯誤處理,它有著相對保守的設(shè)計和顯式處理錯誤的慣例。本部分涵蓋Go錯誤處理的哲學(xué)以及在這套哲學(xué)下一些常見錯誤處理問題的優(yōu)秀實踐。
- 第八部分 測試、性能剖析與調(diào)試
Go自帶強大且為人所稱道的工具鏈。本部分詳細介紹Go在單元測試、性能基準測試與性能剖析以及代碼調(diào)試方面的最佳實踐。
- 第九部分 標準庫、反射與cgo
Go擁有功能強大且質(zhì)量上乘的標準庫,在多數(shù)情況下僅使用標準庫即可實現(xiàn)應(yīng)用的大部分功能,這大幅降低了學(xué)習(xí)成本以及代碼依賴的管理成本。本部分詳細說明高頻使用的標準庫包(如net/http、strings、bytes、time等)的正確使用方式,以及在使用reflect包、cgo時的注意事項。
- 第十部分 工具鏈與工程實踐
本部分涵蓋在使用Go語言進行大型軟件項目開發(fā)的過程中,我們很有可能會遇到的一些工程問題的解決方法,包括使用go module進行Go包依賴管理、Go程序容器鏡像、Go相關(guān)工具使用以及Go語言的避“坑”指南。
勘誤和支持
由于作者水平有限,寫作時間倉促,以及技術(shù)的不斷更新和迭代,書中難免會存在一些錯誤或者不準確的地方,懇請讀者批評指正。書中的源文件可以從https://github.com/bigwhite/GoProgrammingFromBeginnerToMaster下載。如果你有更多的寶貴意見,歡迎發(fā)送郵件至郵箱bigwhite.cn@aliyun.com,期待你的真摯反饋。
致謝
感謝機械工業(yè)出版社華章公司的編輯楊福川與羅詞亮,在這一年多的時間里,他們的支持與鼓勵讓我順利完成全部書稿。
謹以此書獻給Go語言社區(qū)的關(guān)注者和建設(shè)者!
白明
2021年12月
- Java入門很輕松(微課超值版)
- Koa開發(fā):入門、進階與實戰(zhàn)
- Flash CS6中文版應(yīng)用教程(第三版)
- Python深度學(xué)習(xí):基于TensorFlow
- 移動互聯(lián)網(wǎng)軟件開發(fā)實驗指導(dǎo)
- 愛上C語言:C KISS
- Android系統(tǒng)下Java編程詳解
- Appcelerator Titanium:Patterns and Best Practices
- Instant Apache Camel Messaging System
- Wearable:Tech Projects with the Raspberry Pi Zero
- Three.js Essentials
- Learning Google Apps Script
- 亮劍Java Web項目開發(fā)案例導(dǎo)航
- OpenCV:Computer Vision Projects with Python
- C語言程序設(shè)計:現(xiàn)代方法(第2版)