Go語言也稱爲Golang,是由Google公司開發的一種靜態強類型、編譯型、語言原生支持併發、具備垃圾回收功能的編程語言。起源於2007年,並在2009年正式對外發布。Go語言是很是年輕的一門語言,它的主要目標是「兼具 Python 等動態語言的開發速度和 C/C++等編譯型語言的性能與安全性」。linux
Go語言是編程語言設計的又一次嘗試,是對類C語言的重大改進,它不但能讓你訪問底層操做系統,還提供了強大的網絡編程和併發編程支持。Go語言的用途衆多,能夠進行網絡編程、系統編程、併發編程等等。git
Go語言的推出,旨在不損失應用程序性能的狀況降低低代碼的複雜性,具備「部署簡單、併發性好、語言設計良好、執行性能好」等優點。golang
Go語言有時候被描述爲「21世紀的C語言」。Go 從C語言繼承了類似的表達式語法、控制流結構、基礎數據類型、調用參數傳值、指針等不少思想,還有C語言編譯後的運行效率。docker
Go語言沒有類和繼承的概念,經過組合來實現代碼複用,同時它經過接口(interface)的概念來實現多態性。因此Go語言的面向對象編程和傳統面嚮對象語言(如C++和Java)並不相同。數據庫
Go語言有一個吉祥物,在會議、文檔頁面和博文中,大多會包含下圖所示的 Go Gopher,這是才華橫溢的插畫家 Renee French 設計的,她也是 Go 設計者之一 Rob Pike 的妻子。編程
語法簡單windows
Go語言的設計思想相似Unix的「少便是多」。Go語言的語法規則嚴謹,沒有歧義,這使得Go語言簡單易學。Go語言保留了指針,但一般狀況下禁止指針運算(保留unsafe包操做指針的能力)。此外,Go語言還內置切片和字典,在保留運行性能的同時也提升了開發效率。瀏覽器
語言級別支持併發安全
主流的併發模型有多進程模型、多線程模型。和主流多併發模型不一樣,Go語言採用了基於CSP的協程實現,而且在運行時作了更深度的優化處理。這使得語言級別上併發編程變得極爲容易,無須處理回調、也無需關注線程切換,只須要添加一個go關鍵字便可。bash
「經過通訊去共享內存,而不是經過共享內存去通訊」,go語言內置的channel數據結構配合go關鍵字實現併發通訊及控制,這對於須要考慮內存可見性等問題的多線程模型來講,是一個良好的解決方案。
高效的垃圾回收
Go語言的每次升級,垃圾回收器必然是核心組件裏修改最多的部分。從併發清理,到下降STW時間,直到Go的1.5版本實現併發標記,逐步引入三色標記和寫屏障等等,都是爲了能讓垃圾回收在不影響用戶邏輯的狀況下更好地工做。從最開始的秒級別STW到目前的微秒級STW,Go語言開發團隊一直在垃圾回收方面進行努力。
靜態連接
靜態編譯的好處顯而易見。將運行時、依賴庫直接打包到可執行文件內部,簡化了部署和發佈操做,無須事先安裝運行環境和下載諸多第三方庫。雖然相比動態編譯增長了可執行文件的大小,可是省去了依賴庫的管理。隨着微服務和容器化的發展,這也成爲了Go語言的殺手鐗之一,一個二進制文件便可運行服務。
標準庫
功能完善、質量可靠的標準庫爲編程語言提供了有力的支持。在不借助第三方擴展的狀況下,就可完成大部分基礎功能開發,這大大下降了學習和使用成本。
Go語言標準庫能夠說極爲豐富。其中值得稱道的是net/http,僅須簡單幾條語句就能實現一個高性能 Web Server。
工具鏈
完整的工具鏈對於項目開發極爲重要。Go語言在此作得至關不錯,不管是編譯、格式化、錯誤檢查、幫助文檔,仍是第三方包下載、更新都有對應的工具。
值得一提的gofmt工具,爲了解決開發者常常遇到的「代碼風格不統一」的難題,官方直接經過gofmt指定一套標準,能夠看出go語言在工程方面確實解決了許多實際問題。
此外Go語言內置完整測試框架,其中包括單元測試、性能測試、代碼覆蓋率、數據競爭,以及用來調優的pprof,這些都是保障代碼能正確而穩定運行的必備利器。
Go 語言從發佈1.0版本以來備受衆多開發者關注並獲得普遍使用,Go 語言的簡單、高效、併發特性吸引了衆多傳統語言開發者的加入,並且人數愈來愈多。
鑑於Go語言的特色和設計的初衷,Go語言做爲服務器編程語言,很適合處理日誌、數據打包、虛擬機處理、文件系統、分佈式系統、數據庫代理等;網絡編程方面,Go語言普遍應用於Web應用、API應用、下載應用等;除此以外,Go語言還適用於內存數據庫和雲平臺領域,目前國外不少雲平臺都是採用Go開發。
Go發佈以後,不少公司特別是雲計算公司開始用Go重構他們的基礎架構,不少基礎設施都是直接採用Go進行了開發,誕生了許多熱門項目。
基礎設施
表明項目:docker、kubernetes、etcd、consul等。
數據庫
表明項目:influxdb、cockroachdb等。
微服務
表明項目:go-kit、micro、kratos等。
Go語言可用於FreeBSD、Linux、Windows和macOS等操做系統。有關對這些平臺的要求,請參與Go語言網站列出的系統需求。
Go語言的官方網站爲https://golang.org/,國內的用戶能夠訪問https://golang.google.cn/dl/。一般狀況下,按照本文的步驟進行安裝不會出現問題,遇到安裝問題的讀者,請經過公衆號與我聯繫。
下載連接
默認安裝到C:go目錄下,建議不要更改安裝目錄。
GOPATH配置
安裝完畢後須要配置GOPATH,GOPATH是Go語言用來存放第三方源碼、二進制文件、類庫等文件的路徑。
Linux具備衆多發行版,如Ubuntu、CentOS、RedHat、Debian等等,全部發行版的安裝步驟是一致的,區別是根據CPU架構選擇不一樣的發佈包。
常見的我的計算機CPU架構爲amd64,下載amd64架構的發佈包便可。
Linux配置命令
wget https://golang.google.cn/dl/go1.15.8.linux-amd64.tar.gz
mv go1.15.8.linux-amd64.tar.gz /opt
tar xf go1.15.8.linux-amd64.tar.gz
cd ~
mkdir go
cd go
mkdir pkg src bin
echo 'GOPATH=用戶主目錄/go' >> ~/.bashrc
echo 'PATH=/opt/go/bin:$GOPATH/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
go version
Apple公司於2020年發佈了採用M1芯片(arm64架構)的硬件產品,支持M1芯片的Go語言版本爲1.16,根據CPU架構選擇對應的pkg包安裝便可。
macOS配置命令
cd ~
mkdir go
cd go
mkdir pkg src bin
echo 'GOPATH=用戶主目錄/go' >> ~/.bashrc
echo 'PATH=$GOPATH/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
go version
本節將介紹如何在本地計算機上配置集成開發環境,如下步驟使用macOS版本做爲示例,其餘操做系統相似。
Visual Studio Code(簡稱VSCode)是由微軟開發的、同時支持Windows、Linux和macOS操做系統的開源編輯器,它支持測試,而且內置了git功能,提供了豐富的語言支持與經常使用編程工具。
package main import ( "io" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "hello world") }) http.ListenAndServe(":8080", nil) }
編譯並運行文件是開發過程當中的一個常見步驟,Go提供了完成這個步驟的快捷途徑。
Go語言提供了build和run兩個命令來編譯運行Go程序:
使用go run運行HTTP服務器,以後經過瀏覽器打開便可。
本文介紹了Go語言的安裝以及集成開發環境的配置。經過HTTP服務器演示了Go程序的開發過程。
下一章將學習Go語言的基本語法: