- Go語言從入門到精通
- 明日科技編著
- 7120字
- 2024-12-31 22:41:07
第1章 初識Go語言
Go語言的主要設計者有3個人,他們都是計算機科學領域的杰出人物,即肯·湯普森(Ken Thompson)、羅伯·派克(Rob Pike)和羅伯特·格利茨默(Robert Griesemer)。為了避開在C++開發中等待編譯完成的過程,并滿足谷歌的需求,他們憑借各自的經驗和智慧,耗時兩年設計出Go語言,并讓Go語言具備了動態語言的便利性。
本章的知識架構及重難點如下。

1.1 Go語言簡介
Go語言(又稱Golang)起源于2007年,正式對外發布于2009年。開發Go語言是為了在不損失應用程序性能的前提下降低代碼的復雜性。Go語言是類C語言,而且是經過重大改進的類C語言。Go語言繼承了C語言的表達式、基礎數據類型、調用參數傳值、指針等。此外,Go語言具有很好的編譯后機器碼的運行效率,并且它有與現有操作系統的無縫適配等特性。使用Go語言不僅能夠訪問底層操作系統,還能夠進行網絡編程和并發編程。了解了上述關于Go語言的概括內容后,下面開始學習Go語言。
1.1.1 為什么要學習Go語言
Go語言沒有類和繼承的概念,這與Java或C++不同。此外,Go語言具備清晰易懂的輕量級類型系統,使其在類型之間沒有層級關系。這是因為設計者在設計Go語言時,同時借鑒了Pascal語言、Oberon語言和C語言,并取其精華。因此,Go語言是一門混合型的編程語言。
Go語言不僅具有Python等動態語言的開發速度,而且具備C、C++等編譯型語言的性能和安全性,還具備“部署簡單、并發性良好、語言設計良好、執行性能好”等優勢。
在Go語言正式對外發布之前,如果需要編寫系統程序或者網絡程序,那么開發者經常面臨這樣一個問題:是使用執行效率高、編譯速度較慢的C++,還是使用編譯速度快、執行效率較低的.NET或者Java,抑或是使用一門開發難度低、執行效率一般的動態編程語言呢?
在Go語言正式對外發布之后,開發者發現Go語言能夠在編譯速度、執行效率和開發難度上找到很好的平衡點,進而達到“快速編譯,高效執行,易于開發”的目的。
Go語言使用自帶的編譯器編譯代碼。編譯器將源代碼編譯成二進制(或字節碼)格式;在編譯代碼時,編譯器檢查錯誤、優化性能并輸出可在不同平臺上運行的二進制文件。Go語言支持交叉編譯,例如,在Linux系統的計算機上使用Go語言能夠開發可以在Windows系統的計算機上運行的應用程序。這使得Go語言成為一門跨系統平臺的編程語言。
1.1.2 Go語言的特性
明確Go語言的設計初衷后,下面具體介紹Go語言的主要特性。
語法簡單
Go語言的語法規則嚴謹,沒有歧義,沒有變異用法,這使每位開發者編寫的代碼都大致相同,讓應用程序具有良好的可維護性。
并發模型
Go語言從根本上讓一切都并發化。在運行Go語言應用程序時,使用goroutine運行一切。goroutine是Go語言的重要特征。goroutine讓Go語言通過語法實現并發編程變得更容易,無須處理回調,而且不用關注線程切換。
內存分配
將一切并發化帶來一個難題:如何實現高并發下的內存分配和管理,為此,Go語言使用為并發而設計的高性能內存分配組件tcmalloc。
標準庫
Go語言標準庫極其豐富,在不借助第三方擴展插件的情況下,能夠完成大部分基礎功能的開發工作。此外,Go語言還擁有許多優秀的第三方資源,這讓Go語言從近年來幾門新出現的編程語言中脫穎而出。
工具鏈
完整的工具鏈對于日常開發極為重要。Go語言無論是在編譯、格式化、錯誤檢查、幫助文檔等方面,還是在第三方包下載、更新等方面都有對應的工具。
1.1.3 Go語言與并發
早期的CPU都是以單核的形式順序執行機器指令的。順序是指所有的指令都以串行的方式執行,在同一時刻有且僅有一個CPU在執行機器指令。隨著處理器由單核時代向多核時代發展,編程語言也逐步向并發的方向發展。
Go語言就是在時代發展的背景下產生的支持并發的一門編程語言。Go語言從底層原生支持并發,開發者無須使用第三方庫就能夠輕松地在編寫程序時分配CPU資源。
Go語言是在goroutine的基礎上實現并發的。goroutine被視為一種虛擬線程,但goroutine不是線程。Go語言在運行應用程序時會參與調度goroutine,把goroutine合理地分配給每個CPU,進而最大限度地使用CPU。
在多個goroutine之間,Go語言使用通道(channel)進行通信(通道是一種內置的數據結構)。也就是說,Go語言使用通道能夠在不同的goroutine之間同步發送消息。
如果把并發設計為生產者和消費者的模式,那么就要把在不同goroutine之間同步發送的消息放入通道,把并發設計為生產者和消費者的模式如圖1.1所示。

圖1.1 把并發設計為生產者和消費者的模式
1.1.4 Go語言的應用
Go語言從發布1.0版本以來,因其簡單、高效、并發的特性受到廣大開發者的關注,進而被廣泛使用。鑒于Go語言的設計初衷和特性,其主要應用領域如下。
服務器編程。如處理日志、數據打包、虛擬機處理、文件系統等。
分布式系統、數據庫代理、中間件等。
網絡編程。如Web應用、API應用、下載應用等。Go語言非常適合完成網絡并發服務,在這個領域內被廣泛應用;其內置的net/http包基本上把日常應用程序開發所需的網絡功能都實現了。
數據庫操作。
云平臺領域。Go語言發布后,很多公司(尤其是云計算公司)開始用它重構云平臺的基礎架構,如阿里中間件、聚美優品、斗魚直播、人人車、招財貓、美餐網等。
1.2 Go語言開發環境
搭建Go語言的開發環境要在Go語言的官網上下載Go語言開發包。Go語言開發包可以安裝在Linux系統、FreeBSD系統、Mac OS系統和Windows系統上。本節將以Windows系統為例,講解搭建Go語言開發環境的具體步驟。
1.2.1 下載Go語言開發包
打開瀏覽器,輸入網址https://golang.google.cn/dl/后按Enter鍵,即可打開如圖1.2所示的Go語言官網首頁。

圖1.2 Go語言官網的下載頁面
說明
因為Go語言官網持續更新,并且通常更新的版本會向下兼容,所以讀者根據自己的計算機系統下載最新版本的Go語言開發包即可。
筆者當前的CPU系統是64位Windows系統,所以要下載64位的Go語言開發包。單擊圖1.2中使用矩形邊框標記的超鏈接,彈出如圖1.3所示的“新建下載任務”對話框,筆者把64位Go語言開發包下載到D:\GO路徑下,單擊“下載”按鈕。

圖1.3 “新建下載任務”對話框
說明
如果當前CPU系統是32位Windows系統,那么就需要下載能夠安裝在32位Windows系統上的Go語言開發包。使用鼠標滾輪向下滾動Go語言官網的首頁,找到與64位Windows系統同版本的32位Windows系統的Go語言開發包,單擊如圖1.4所示的超鏈接即可。

圖1.4 32位Windows系統的Go語言開發包
1.2.2 安裝Go語言開發包
按照下載路徑D:\GO,即可在D盤下的Go文件夾中找到如圖1.5所示的64位的Go語言開發包。雙擊Go語言開發包。
打開如圖1.6所示的Go語言開發包的安裝對話框后,單擊Next按鈕。

圖1.5 64位的Go語言開發包

圖1.6 用于安裝64位Windows系統的Go語言開發包的對話框
打開如圖1.7所示的End-User License Agreement(用戶許可協議)對話框后,先選中I accept the terms in the License Agreement復選框,再單擊Next按鈕。
打開如圖1.8所示的Destination Folder(目標文件夾)對話框,單擊Change按鈕把目標文件夾路徑設置為D:\GO,再單擊Next按鈕。

圖1.7 “用戶許可協議”對話框

圖1.8 “目標文件夾”對話框
打開如圖1.9所示的Ready to install Go Programming Language amd64 go1.20.2(準備安裝Go語言開發包)對話框后,單擊Install按鈕。
Go語言開發包安裝完畢后,彈出如圖1.10所示的完成安裝Go語言開發包的對話框,單擊Finish按鈕。

圖1.9 “準備安裝Go語言開發包”對話框

圖1.10 完成安裝Go語言開發包的對話框
再次打開如圖1.11所示的D盤下的Go文件夾,發現新生成了許多文件和文件夾。其中,api文件夾的主要內容是Go語言每個版本的api變更差異;bin文件夾是Go語言的編譯器、文檔工具和格式化工具;doc文件夾是英文版的Go語言文檔;lib文件夾是Go語言可以引用的一些庫文件;src文件夾是標準庫的源碼;test文件夾是Go語言用于測試的實例。

圖1.11 在D盤下的Go文件夾中新生成的文件和文件夾
1.2.3 配置Go語言環境變量
在Windows 10系統的桌面上,找到并右擊“此電腦”圖標,在彈出的快捷菜單中選擇“屬性”命令,如圖1.12所示。
在如圖1.13所示的對話框的左側,單擊“高級系統設置”超鏈接。

圖1.12 選擇“屬性”命令

圖1.13 單擊“高級系統設置”超鏈接
在如圖1.14所示的“系統屬性”對話框中,單擊“環境變量”按鈕。
如圖1.15所示,單擊“新建”按鈕,分別輸入變量名GOROOT和變量值D:\GO,再單擊“確定”按鈕。這樣就成功地把Go語言開發包的安裝路徑添加到環境變量中了。

圖1.14 打開“環境變量”對話框

圖1.15 新建環境變量GOROOT
如圖1.16所示,先單擊“新建”按鈕,分別輸入變量名GOPATH和變量值D:\GoProject,再單擊“確定”按鈕。這樣就成功地把開發Go項目的路徑添加到環境變量中了。

圖1.16 新建環境變量GOPATH
如圖1.17所示,先單擊“新建”按鈕,分別輸入變量名GOPROXY和變量值https://goproxy.io,再單擊“確定”按鈕。這樣就把用于下載第三方包的GOPROXY代理添加到環境變量中了。

圖1.17 新建環境變量GOPROXY
如圖1.18所示,在“環境變量”對話框中雙擊環境變量Path。
如圖1.19所示,單擊“新建”按鈕,分別把D:\GO、D:\GO\bin、%GOROOT%\bin和%GOPATH%\bin添加到Path中。

圖1.18 打開環境變量Path

圖1.19 編輯環境變量Path
最后,逐一單擊“確定”按鈕,返回上一級。這樣Go語言環境變量就配置成功了。
1.2.4 測試Go語言開發包是否正常運行
Go語言開發包安裝完畢后,需要測試它能否正常運行。在Windows系統下先單擊桌面左下角的圖標;再在下方的搜索框中輸入cmd,如圖1.20所示;然后按Enter鍵,打開命令提示符對話框。
在命令提示符對話框中輸入go env命令,按Enter鍵后,將顯示如圖1.21所示的Go語言開發包的相關信息,這說明Go語言開發包已經安裝成功。

圖1.20 打開命令提示符對話框

圖1.21 顯示Go語言開發包的相關信息
說明
“set GO111MODULE=on”這個配置項讓Go語言使用Module,禁止Go命令行在GOPATH目錄下查找源文件。Module是相關Go包的集合,是源代碼交換和版本控制的單元。Go命令行支持使用Module記錄和解析對其他模塊的依賴性。也就是說,Module可以替代GOPATH,指定Go命令行查找源文件。
1.3 Go語言開發工具
Go語言開發工具主要是為Go語言提供編碼輔助和內置工具。那么,Go語言開發工具應該具備哪些主要特點呢?
語法高亮。
匹配括號和括號補全。
查找和替換功能。
檢查編譯錯誤。
在Linux系統、Mac OS系統和Windows系統下正常工作。
通過第三方庫擴展或者替換某個功能。
代碼自動補全和代碼折疊。
運行程序和調試程序。
下面推薦幾款常用的Go語言開發工具。
Goland。它是由JetBrains公司開發的商業Go語言開發工具(需付費)。
LiteIDE。它是一款非常好用的、輕量級的Go語言開發工具。對代碼編寫、自動補全和程序的運行調試都能很好地支持。
GoClipse。它是一款Eclipse插件,雖然使用它需要安裝JDK,但它擁有Eclipse的諸多功能。
VS Code(Visual Studio Code)。它是一款由微軟開發的、跨平臺的免費開發工具,不但具有語法高亮、代碼自動補全、代碼重構等功能,而且內置命令行工具和Git版本控制系統,還可以通過內置的“擴展商店”安裝擴展插件以拓展其功能。
本書把VS Code作為Go語言開發工具。本節將介紹如何在Windows系統下下載、安裝和漢化VS Code。
1.3.1 下載VS Code
打開瀏覽器,輸入網址https://code.visualstudio.com/按Enter鍵,即可打開如圖1.22所示的VS Code官網首頁。單擊Download按鈕。

圖1.22 VS Code官網首頁
打開如圖1.23所示的VS Code下載頁面,單擊Windows系統版塊下方與System Installer標簽對應的64 bit按鈕。

圖1.23 VS Code的下載頁面
說明
如果當前CPU系統是32位Windows系統,就要單擊Windows系統版塊下方與System Installer標簽對應的32 bit按鈕。
這時,彈出如圖1.24所示的“新建下載任務”對話框,筆者把64位Windows系統的VS Code下載到D:\VSCode路徑下。

圖1.24 “新建下載任務”對話框
1.3.2 安裝VS Code
按照下載路徑D:\VSCode,可在D盤的VS Code文件夾中找到如圖1.25所示的64位VS Code安裝包。雙擊該安裝包。

圖1.25 64位Windows系統的VS Code安裝包
彈出如圖1.26所示的“許可協議”對話框,選中“我同意此協議”單選按鈕,單擊“下一步”按鈕。
彈出如圖1.27所示的“選擇目標位置”對話框,單擊“瀏覽”按鈕,設置安裝路徑為D:\VSCode\Microsoft VS Code,再單擊“下一步”按鈕。
彈出如圖1.28所示的“選擇開始菜單文件夾”對話框,“選擇開始菜單文件夾”的默認設置為Visual Studio Code。此處不做修改,單擊“下一步”按鈕。
彈出如圖1.29所示的“選擇附加任務”對話框,選中所有復選框,單擊“下一步”按鈕。

圖1.26 “許可協議”對話框

圖1.27 “選擇目標位置”對話框

圖1.28 “選擇開始菜單文件夾”對話框

圖1.29 “選擇附加任務”對話框
彈出如圖1.30所示的“準備安裝”對話框,檢查VS Code的安裝路徑、開始菜單文件夾和附加任務是否與之前設置的內容一致。檢測無誤后,單擊“安裝”按鈕。
Go語言開發工具包安裝完后,彈出如圖1.31所示的“Visual Studio Code安裝完成”對話框,選中“運行Visual Studio Code”復選框,單擊“完成”按鈕。

圖1.30 “準備安裝”對話框

圖1.31 “Visual Studio Code安裝完成”對話框
1.3.3 漢化VS Code
關閉VS Code的安裝程序后,VS Code自動運行,VS Code界面如圖1.32所示。這時,在VS Code界面的右下角彈出“安裝語言包并將顯示語言更改為中文(簡體)”窗口。單擊“安裝并重啟”按鈕,即可對VS Code執行漢化操作。

圖1.32 VS Code界面
說明
如果VS Code界面中的彈窗消失,單擊VS Code界面右下角的“通知”圖標即可顯示彈窗。
VS Code的漢化需要持續一段時間。在這段時間內,不要對VS Code進行任何操作。VS Code成功漢化后,彈出如圖1.33所示的VS Code界面。

圖1.33 漢化后的VS Code界面
1.3.4 在VS Code中安裝Go語言插件
雖然VS Code默認不支持Go語言,但是開發者可以從VS Code的擴展商店里安裝Go語言插件,使VS Code支持Go語言。
如圖1.34所示,在漢化后的VS Code界面中,單擊“擴展商店”圖標,在搜索文本框中輸入go,按Enter鍵。在VS Code界面的左側顯示的搜索結果中找到Go語言插件,單擊與其對應的“安裝”按鈕。
VS Code成功安裝Go語言插件后,顯示如圖1.35所示的界面。

圖1.34 搜索并安裝Go語言插件

圖1.35 VS Code成功安裝Go語言插件后的界面
1.4 第一個Go語言程序
前幾節介紹了如何下載、安裝Go語言開發環境,以及如何下載、安裝、漢化開發工具VS Code,還在VS Code中安裝了Go語言插件。下面講解如何使用VS Code編寫第一個Go語言程序。
1.4.1 創建Go項目和Go文件
關閉并重新打開VS Code后,VS Code顯示如圖1.36所示的界面。選擇“開始”命令。

圖1.36 選擇“開始”命令
在如圖1.37所示的界面中,選擇“新建文件”命令。
跳轉到如圖1.38所示的界面,選擇文本框下方的“文本文件”命令。
在如圖1.39所示的界面中,選擇“選擇語言”命令。

圖1.37 選擇“新建文件”命令

圖1.38 選擇“文本文件”命令

圖1.39 選擇“選擇語言”命令
跳轉到如圖1.40所示的界面后,選擇“Go (go)”命令。

圖1.40 選擇“Go (go)”命令
跳轉到如圖1.41所示的界面后,在界面的右下角彈出一個窗口。這個窗口的提示內容是“需要安裝Go語言需要的第三方插件”。單擊Install All按鈕進行安裝。

圖1.41 單擊Install All按鈕
如圖1.42所示,待“輸出”下方出現“All tools successfully Installed. You are ready to Go.”這一提示信息,說明Go語言依賴的第三方插件成功安裝了。
在D:\GoProject路徑下,新建空文件夾GoDemos,單擊如圖1.42所示的“打開文件夾”按鈕,打開文件選擇對話框,選擇GoDemos文件夾作為Go語言程序的項目文件夾。
在VS Code彈出的如圖1.43所示的對話框中,選中“信任父文件夾‘GoProject’中所有文件的作者”復選框,單擊“是,我信任此作者 信任文件夾并啟用所有功能”按鈕。

圖1.42 單擊“打開文件夾”按鈕

圖1.43 “是否信任此文件夾的文件的作者”對話框
跳轉到如圖1.44所示的界面后,在這個界面的左上角即可看到第一個Go語言程序所在的項目文件夾,即GODEMOS(GoDemos中的字母全部都大寫)。
注意
當VS Code提示有新內容更新(在如圖1.39所示的界面中的左下角)時,需要及時更新VS Code。
如圖1.45所示,當把鼠標光標移動到GODEMOS項目文件夾附近時,VS Code會閃現出4個圖標。單擊左側的第一個圖標,新建Go文件。

圖1.44 Go語言程序項目文件夾

圖1.45 新建Go文件
如圖1.46所示,VS Code在GODEMOS項目文件夾的下方添加一個文本框。在這個文本框里,輸入Go文件的文件名demo_01.go后,按Enter鍵。
注意
Go文件的文件擴展名為go,在命名Go文件時,不能省略文件擴展名。

圖1.46 命名Go文件
新建Go文件后,VS Code的界面如圖1.47所示。

圖1.47 新建Go文件后的VS Code界面
1.4.2 編寫第一個Go語言程序
本節的主要內容有兩個,一個是在新建的Go文件中編寫第一個Go語言程序;另一個是講解第一個Go語言程序。
【例1.1】換行輸出和不換行輸出(實例位置:資源包\TM\sl\1\1)
在新建的Go文件中,首先使用package關鍵字聲明main包,然后使用import關鍵字導入fmt包,接著使用func關鍵字聲明main()函數,最后分別調用fmt包中的Println()函數和Print()函數打印hello,world和“你好,世界”。代碼如下。

雖然通過實現代碼上方的文字描述能夠了解第一個Go語言程序的編寫步驟,但是無法明確每一行代碼的含義。下面將對第一個Go語言程序的實現代碼進行解析。
在Go語言中,“包”是管理單位,每個Go文件首先要使用package關鍵字聲明其所屬的包。
main包是Go語言程序的入口包,Go語言程序必須有且僅有一個main包。Go語言程序如果沒有main包,在編譯時會出錯,無法生成可執行文件。
聲明main包后,使用import關鍵字導入當前Go語言程序依賴的包,并且使用英文格式下的雙引號引用這個包的名字。
fmt包是Go語言的標準庫,用于格式化輸出數據和掃描輸入數據。
在Go語言中,使用func關鍵字聲明函數。
main()函數是Go語言程序的入口函數,只能聲明在main包中,不能聲明在其他包中。
Println()函數是fmt包中的基礎函數,其作用是輸出數據,并且在數據的末尾使用換行符,使數據末尾處的光標出現在下一行,實現換行效果。
Print()函數也是fmt包中的基礎函數,其作用也是輸出數據;與Println()函數不同的是,Print()函數在數據的末尾沒有使用換行符,使光標停留在數據的末尾,實現不換行效果。
1.4.3 運行Go語言程序
在新建的demo_01.go文件中編寫完成第一個Go語言程序后,VS Code的界面如圖1.48所示。
那么,在VS Code中如何運行例1.1呢?為了解決這個問題,需要在VS Code中安裝Code Runner插件。
如圖1.49所示,在漢化后的VS Code界面中,單擊“擴展商店”按鈕,在搜索文本框中輸入code runner,然后按Enter鍵。在VS Code界面的左側列出的搜索結果中找到Code Runner插件,單擊與其對應的“安裝”按鈕。

圖1.48 第一個Go語言程序完成后VS Code的界面

圖1.49 搜索并安裝Code Runner插件
安裝Code Runner插件后,VS Code顯示如圖1.50所示的界面。單擊關閉“擴展Code Runner”窗口。

圖1.50 VS Code成功安裝Go語言插件后的界面
關閉“擴展Code Runner”窗口后,VS Code顯示如圖1.51所示的界面。對比圖1.48,發現在如圖1.51所示的界面的右上角多了一個圖標。
圖標就是運行Go語言程序的快捷方式。單擊
圖標運行例1.1。

圖1.51 關閉“擴展Code Runner”窗口后VS Code界面
如圖1.52所示,例1.1的運行結果出現在VS Code界面右下方的“輸出”窗口內。

圖1.52 例1.1的運行結果
1.5 要點回顧
通過學習本章,讀者能夠明確什么是Go語言、為什么學習Go語言、Go語言的特性和應用、Go語言與并發的關系、在Windows系統中搭建Go環境的方法、在使用Go語言開發工具前的準備工作等內容。此外,通過解析第一個Go程序的編寫和運行過程,使讀者既能夠熟悉Go語言的編碼方式,又能夠進一步明確Go語言開發工具的使用方法。
- Mastering Concurrency Programming with Java 8
- Mastering Adobe Captivate 2017(Fourth Edition)
- Reactive Programming with Swift
- Mastering Julia
- Python機器學習經典實例
- 零基礎學Python數據分析(升級版)
- QGIS:Becoming a GIS Power User
- Java系統化項目開發教程
- 深入分布式緩存:從原理到實踐
- Cocos2d-x Game Development Blueprints
- Java Web應用開發給力起飛
- C++ System Programming Cookbook
- 算法設計與分析:基于C++編程語言的描述
- Mastering VMware Horizon 7(Second Edition)
- Clojure High Performance Programming(Second Edition)