2023年,受夠了c++煎熬的google首席軟體工程師rob pike糾集robert griesemer和ken thompson兩位牛人,決定創造一種新語言來取代c++, 這就是golang。出現在21世紀的go語言,雖然不能如願對c++取而代之,但是其近c的執行效能和近解析型語言的開發效率以及近乎於完美的編譯速度,已經風靡全球。特別是在雲專案中,大部分都使用了golang來開發,不得不說,golang早已深入人心。而對於乙個沒有歷史負擔的新專案,golang或許就是個不二的選擇。
被稱為go語言之父的rob pike說,你是否同意go語言,取決於你是認可少就是多,還是少就是少(less is more or less is less)。rob pike以一種非常樸素的方式,概括了go語言的整個設計哲學–將簡單、實用體現得淋漓盡致。
很多人將go語言稱為21世紀的c語言,因為go不僅擁有c的簡潔和效能,而且還很好的提供了21世紀網際網路環境下服務端開發的各種實用特性,讓開發者在語言級別就可以方便的得到自己想要的東西。
2023年5月 google發現了go語言的巨大潛力,得到了google的全力支援,這些人開始全職投入go語言的設計和開發。
2023年11月 go語言第乙個版本發布。2023年3月 第乙個正式版本go1.0發布。
2023年8月 go1.5發布,這個版本被認為是歷史性的。完全移除c語言部分,使用go編譯go,少量**使用彙編實現。另外,他們請來了記憶體管理方面的權威專家rick hudson,對gc進行了重新設計,支援併發gc,解決了一直以來廣為詬病的gc時延(stw)問題。並且在此後的版本中,又對gc做了更進一步的優化。到go1.8時,相同業務場景下的gc時延已經可以從go1.1的數秒,控制在1ms以內。gc問題的解決,可以說go語言在服務端開發方面,幾乎抹平了所有的弱點。
在go語言的版本迭代過程中,語言特性基本上沒有太大的變化,基本上維持在go1.1的基準上,並且官方承諾,新版本對老版本下開發的**完全相容。事實上,go開發團隊在新增語言特性上顯得非常謹慎,而在穩定性、編譯速度、執行效率以及gc效能等方面進行了持續不斷的優化。
2.2. goroute天然併發
使用乙個go
則在編譯時會自動開啟乙個執行緒來執行後面的命令/函式/方法,不用像python需要先呼叫thread模組來開啟執行緒
2.3. goroute執行緒之間的資料通訊——管道
使用go可以建立乙個輕量級的goroute執行緒,執行緒之間如何通訊,共享資料呢?答案是:使用管道來進行通訊。管道需要定義並建立後,才能使用
定義乙個管道:
var my_pipe chan
int//my_pipe為管道名,chan為管道關鍵字表示定義的是乙個管道,int表示管道內儲存的資料型別
建立乙個管道:
my_pipe = make(chan
int,10)
//make關鍵字表示開闢乙個記憶體空間,第乙個引數表示建立乙個管道,10表示管道能儲存的資料型別個數,如果超出則阻塞
定義和建立可以合併寫
my_pipe := make(chan
int,10)
管道的定義和使用範例:
//goroute執行緒之間使用管道進行資料通訊
func main()
func pi_pie()
2.4. 多返回值
go的函式可以有多個返回值
「` func main()
//多返回值函式
func p_fun(a int,b int) (int,int)
2.5. go的「包」的概念
go在首行使用「package 《包名》
」來宣告自己所在的包(主程式包為main包,也可以自定義包名),「import」引入其他的包,go自帶的系統包所在的路徑已經在「goroot」環境變數中設定好了
可以使用「import」直接引入,而自己定義的包:package 《包名》
在import匯入時則需要相對路徑:第三方包預設在「goroot」和「gopath」環境變數所在的路徑下的src目錄下尋找
go的package不支援使用「../」方式的相對路徑,都是從$gopath/src下一層一層找的2.6. go檔案編碼規範
使用gofmt
環境搭建參考**:
參考:1.2 開發環境搭建(ide為vscode)
1.3 開發環境搭建(ide為pycharm)
'''新版本的pycharm可能已經無法使用'''
.com/plugin/5047-go-language-golang-org-support-plugin (pycharm社群版)
.com/plugin/9568-go (pycharm專業版)
根據pycharm的idea版本號(idea版本號在安裝目錄下的「build.txt/readme.txt」檔案中,通常是aa.bbbb
> 需要注意的是,pycharm的idea號aa.bbbb
.cc 只要 aa與**上的idea號對應上即可,它是乙個範圍,如idea號172.4343
package main官方的安裝文件是使用import (
"fmt"
"time"
)func main()
//go的高併發
func bingfa()
}//goroute執行緒之間使用管道進行資料通訊
func pi_pie()
//帶返回值的函式
func my_sum(a int,b int) int
//多返回值函式
func p_fun(a int,b int) (int,int)
go get github.com/tools/godep
,很可惜,因為「網路」問題會報乙個找不到golang.org/x/tools/go/vcs
的錯誤。
然而 是 golang.org/x/tools 的乙個映象,**是一樣的,所以我是如下安裝的:
此時godep安裝在你的gopath\bin目錄下。
對其他類似golang.org/x/tools/go/vcs
的錯誤的辦法也管用
go 語言入門
參見文章1,文章2 1.編譯 go build test.go 2.執行 go run test.go 3.看幫助 go doc builtin go doc fmt fnv4.執行測試 編寫源 even.go this package is test for write package packa...
go語言入門
目錄go命令 apt install golang yum install golang y 新增環境變數,使用一下命令測試安裝是否成功 go versiongo help就像其他靜態型別語言一樣,要執行 go 程式,需要先編譯,然後在執行產生的可執行檔案。go build命令就是用來編譯 go程式...
Go語言入門之運算子
比較運算子用於比較兩個內容的大小,在判斷和分支中使用頻率比較高 運算子含義 是否等於,返回值為bool型別,判斷是否成立 不等於,大於,大於等於,小於,小於等於 運算子含義 邏輯非,取結果的反 邏輯與,只有兩側同時為真時總體結果才為真 雙豎線邏輯或,至少為一側為真總體結果才為真 賦值運算子的目的是給...