Google創造Golang的原因:
- 計算機硬件技術更新頻繁,性能提高很快。目前主流的編程語言發展明顯落後於硬件,不能合理利用多核多CPU的優勢提升軟件系統性能。
- 軟件系統複雜度越來越高,維護成本越來越高,目前缺乏一個足夠簡潔高效的編程語言。【現有的編程語言;風格不統一;計算能力不夠;處理大併發不夠好】
- 企業運行維護很多c/c++的項目,c/c++程序運行速度雖然很快,但是編譯速度卻很慢,同時還存在“內存泄漏”的一系列的困擾需要解決。
Golang的發展歷程:
- 2007年,谷歌工程師Rob Pike,Ken Thomson和Robert Griesemer開始設計一門全新的語言,這是Go語言的最初原型。
- 2009年11月10日,Google將Go語言以開放源代碼的方式向全球發佈。
- 2015年8月19日,Go1.5版發佈,本次更新中移除了“最後殘餘的C代碼”。
- 2017年2月17日,Go語言Go1.8版發佈。
- 2017年8月24日,Go語言Go1.9版發佈。1.9.2版本
- 2018年2月16日,Go語言Go1.10版發佈。
Golang語言的特點:
Go語言保證了既能達到靜態編譯語言的安全和性能,又能達到動態語言開發維護的高效率;相當於Go=C+Python,說明Go語言既有C靜態語言程序的運行速度,又能達到Python動態語言的快速開發。
- 從語言中繼承了很多理念,包括表達式語法,控制結構,基礎數據類型,調用參數傳值,指針等等,也保留了和C語言一樣的編譯執行方式及弱化的指針。
舉一個案例://go 語言的指針的使用特點: func testPtr(num *int) { *num=20 }
- 引入包的概念,用於組織程序結構,Go語言的一個文件都要歸屬於一個包,而不能單獨存在。
package main //一個go文件需要在一個包; import “fmt” func sayok() { //輸出一句話 fmt.Println("ok") }
- 垃圾回收機制,內存自動回收,不需要開發人員管理。
- 天然支持大併發。
1)從語言層面支持併發,實現簡單;
2)goroutine,輕量級線程,可實現大併發處理,高效利用多核;
3)基於CPS併發模型(Communicating Sequential Processes)實現;
4)吸收了管道通訊機制,形成Go語言特有的管道channel,通過管道可以實現不同的goroute之間的相互通信;
5)函數可以返回多個值;舉例://寫一個函數,實現同時返回 和,差; //go 函數支持返回多個值; func getSumAndSub(n1 int,n2 int) (int,int) { sum := n1 + n2 //go 語言後面不要帶分號; sub := n1 - n2 return sum , sub }
6)新的創新,比如切片 slice,延時執行 defer;
Golang的開發工具的介紹:
- 工具介紹
1)visual studio code(vscode)Microsoft產品:一個運行於Mac OS X,Windows和Linux之上的,默認提供Go語言的語法高亮,安裝Go語言插件,還可以智能提示,編譯運行等功能;
2)Sublime Text,可以免費試用,默認也支持Go代碼語法高亮,只是保存次數達到一定數量之後就會提示是否購買,點擊取消繼續使用,和正式註冊版本沒有任何區別;
3)Vim,Vim是從vi發展出來的一個文本編輯器,代碼補全、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用;
4)Emacs,Emacs傳說中的神器,它不僅僅是一個編輯器,因爲功能強大,可稱它爲集成開發環境;
5)Eclipse IDE工具,開源免費,並提供GoEclipse插件;
6)LiteIDE, LiteIDE是一款專門爲Go語言開發的跨平臺輕量級集成開發環境(IDE),是國人開發的;
7)JetBrains公司的產品:PhpStrom、WebStrom和PyCharm等IDE工具,都需要安裝Go插件;
工具選擇:
- 如何選擇開發工具
先選擇用visual studio code或者vim文本編輯器本,到對Go語言有一定了解後,再使用Eclipse等IDE開發工具。 - 爲什麼要這樣選擇
1)更深刻的理解Go語言技術,培養代碼感;
2)有利於公司面試,現在寫代碼;
VSCode的安裝和使用:
到下載地址選擇適合自己系統的VSCode安裝軟件:
https://code.visualstudio.com/download
安裝到D盤指定路徑,安裝即可使用。
在實際開發中,可以在windows開發好程序,然後部署到linux下。
下載SDK工具包:
- 介紹SDK
1)SDK的全程(Software Development Kit 軟件開發工具包);
2)SDK是提供給開發人員使用的,其中包含了對應開發語言的工具包; - 下載SDK工具包
Go語言的官網是:golang.org,但是訪問很慢;這裏選擇中國的下載地址:Golang中國,https://golang.google.cn/
我下載的是1.9.2版本的,選擇windows的zip包,解壓到指定路徑即可使用。 - windows下配置環境變量
1)配置環境變量介紹
根據windows系統在查找可執行程序的原理,可以將Go所在路徑定義到環境變量中,讓系統幫我們去找運行執行的程序,這樣在任何目錄下都可以執行go指令。
2)配置環境變量GOROOT:指定SDK的安裝路徑D:\golang\go1.9.2.windows-amd64\go; Path:添加SDK的/bin目錄;%GOROOT%\bin; GOPATH:工作目錄,將來我們的go項目的工作路徑D:\gocode;
3)打開DOS命令測試
C:\Users\Administrator>go version go version go1.9.2 windows/amd64
-
linux下配置環境變量
vim /etc/profile export GOROOT=/opt/go export PATH=$PATH:$GOROOT/bin export GOPATH=$HOME/goproject source /etc/profile
Go語言快速開發入門:
- 需求
要求開發一個hello.go程序,可以輸出“hello,world” - 步驟
對上圖的說明:
1)go文件的後綴是 .go
2)package main
表示該hello.go文件所在的包是main,在go中,每個文件都必須歸屬於一個包。
3)import “fmt”
表示:引入一個包,包名爲fmt,引入該包後,就可以使用fmt包的函數,比如:fmt.Println 打印
4)func main() {
}
func是一個關鍵字,表示一個函數。
main是函數名,是一個主函數,即我們程序的入口。
5)fmt.Println("hello,world")
表示調用fmt包的函數Println輸出“hello,world” - 編譯執行
1)先編譯再執行(兩步較快)D:\gocode>go run hello.go hello,world D:\gocode>hello.exe hello,world
2)編譯執行(一步較慢)
D:\gocode>hello.exe hello,world
3)兩種執行流程的方式區別
① 如果先編譯生成了可執行文件,那麼可以將該可執行文件拷貝到沒有go開發環境的機器上,仍然可以執行;
② 如果是通過go run直接執行go源代碼,那麼如果要在另外一個機器上這麼運行,也需要go開發環境,否則無法執行;
③ 在編譯時,編譯器會將程序運行依賴的庫文件包含在可執行文件中,所以,可執行文件變大了很多。 - Go程序開發的注意事項
1)Go源文件以“go”爲擴展名;
2)Go應用程序的執行入口是main()函數,這個類似於其他編程語言(比如java/C)
3)Go語言嚴格區分大小寫;
4)Go語言由一條條語句構成,每個語句後不需要分號(Go語言會在每行後自動加分號),這也體現出Golang的簡潔性;
5)Go編譯器是一行行進行編譯的,因此我們要一行就寫一條語句,不能把多條語句寫在同一行,否則報錯;
6)go語言定義的變量或者import的包如果沒有使用到,代碼不能編譯通過;
7)大括號都是成對出現的,缺一不可。
Go語言的轉義字符(escape char):
1)\t:表示一個製表符,通常使用它排版;
2)\n:換行符;
3)\:表示一個\
4)\":表示一個"
5)\r:表示一個回車
D:\gocode>go run test01.go
張飛厲害雪山飛狐
案例:
D:\gocode>go run test02.go
姓名 年齡 籍貫 住址
john 12 河北 北京
Golang語言註釋:
- 行註釋
基本語法:// 註釋內容
舉例: - 塊註釋
基本語法:/* 註釋內容 */
舉例:
- 使用細節
① 對於行註釋和塊註釋,被註釋的文字,不會被Go編譯器執行;
② 塊註釋裏面不允許有塊註釋嵌套。
規範的代碼風格:
- 正確的註釋和註釋風格
1)Go官方推薦使用行註釋來註釋整個方法和語句;
2)Go的源代碼就是使用行註釋的。 - 正確的縮進和空白
1)使用tab鍵進行縮進;如果需要多行縮進,全選然後按shift+tab鍵向左移,然後按一次tab鍵實現縮進;
2)使用gofmt進行格式化:gofmt -w 將格式化後的內容寫入到文件中。 - 運算符兩邊習慣加一個空格
var num = 2 + 4 * 5
- Go語言的代碼風格
正確的寫法:func main() { fmt.Println("hello,world!") }
錯誤的寫法:
func main() { fmt.Println("hello,world!") }
- 一行最長不超過80個字符,超過的使用換行展示,保持格式優雅
運行輸出還是一行:package main import "fmt" func main() { //fmt.Println("hello,world!") fmt.Println("helloworldhelloworldhelloworldhellow", "orldhelloworldhelloworldhelloworldhelloworldhell", "oworldhelloworldhelloworldhelloworldhelloworldhe", "lloworldhelloworldhelloworldhelloworldhelloworldh", "elloworldhelloworldhelloworld") }
運行輸出以分割的樣式展示:
package main import "fmt" func main() { //fmt.Println("hello,world!") fmt.Println("helloworldhelloworldhelloworldhellow\n", "orldhelloworldhelloworldhelloworldhelloworldhell\n", "oworldhelloworldhelloworldhelloworldhelloworldhe\n", "lloworldhelloworldhelloworldhelloworldhelloworldh\n", "elloworldhelloworldhelloworld") }
- Go語言管方指南
https://tour.go-zh.org/welcome/1