第1章 關于Go語言的介紹
前言
- Go 語言結合了底層系統(tǒng)語言的能力以及現(xiàn)代語言的高級特性,旨在降低構建簡單、可靠摔吏、高效軟件的門檻
- Go語言是由谷歌公司在2007年開始開發(fā)的一門語言灿巧,目的是能在多核心時代高效編寫網絡應用程序赂摆。Go語言的創(chuàng)始人Robert Griesemer、Rob Pike和Ken Thompson都是在計算機發(fā)展過程中作出過重要貢獻的人
- Go是一門開源的編程語言狸窘,目的在于降低構建簡單墩朦、可靠、高效軟件的門檻
- Go平衡了底層系統(tǒng)語言的能力翻擒,以及在現(xiàn)代語言中所見到的高級特性氓涣。你可以依靠Go語言來構建一個非常快捷陋气、高性能且有足夠控制力的編程環(huán)境劳吠。使用Go語言,可以寫得更少巩趁,做得更多
- 源代碼下載地址
介紹
高性能服務器擁有64核痒玩、128核,甚至更多核议慰。但是我們依舊在使用為單核設計的技術在編程
Go語言是一種讓代碼分享更容易的編程語言蠢古。Go 語言自帶一些工具,讓使用別人寫的包更容易别凹,并且 Go 語言也讓分享自己寫的包更容易
更高效地利用昂貴服務器上的所有核心便瑟,而且它編譯大型項目的速度也很快
用Go解決現(xiàn)代編程難題
Go語言不僅提供了高性能的語言,同時也讓開發(fā)更快速
Go語言的語法簡潔到只有幾個關鍵字番川,便于記憶。Go語言的編譯器速度非臣箍颍快
快速瀏覽一下這些關鍵特性
開發(fā)速度
編譯一個大型的C或者C++項目所花費的時間甚至比去喝杯咖啡的時間還長
編譯Go程序時颁督,編譯器只會關注那些直接被引用的庫,很多Go程序可以在1秒內編譯完浇雹。在現(xiàn)代硬件上沉御,編譯整個Go語言的源碼樹只需要20秒
并發(fā)
要開發(fā)出能充分利用硬件資源的應用程序是一件很難的事情
-
Go語言對并發(fā)的支持是這門語言最重要的特性之一。goroutine很像線程昭灵,但是它占用的內存遠少于線程吠裆,使用它需要的代碼更少伐谈。通道(channel)是一種內置的數(shù)據(jù)結構,可以讓用戶在不同的goroutine之間同步發(fā)送具有類型的消息
goroutine
goroutine是可以與其他goroutine并行執(zhí)行的函數(shù)试疙,同時也會與主程序(程序的入口)并行執(zhí)行诵棵。在Go語言中,net/http庫直接使用了內置的goroutine祝旷。每個接收到的請求都自動在其自己的goroutine里處理
執(zhí)行一段代碼同時履澳,并行去做另外一些事情的demo
func log(msg string) { // 記錄日志代碼 } go log("發(fā)生了可怕的事情")
關鍵字go是唯一需要去編寫的代碼,調度log函數(shù)作為獨立的goroutine去運行怀跛,以便與其他goroutine并行執(zhí)行距贷。這意味著應用程序的其余部分會與記錄日志并行執(zhí)行,goroutine占用的資源更少吻谋,所以常常能啟動成千上萬個goroutine
通道
- 通道是一種數(shù)據(jù)結構忠蝗,可以讓goroutine之間進行安全的數(shù)據(jù)通信。通道可以幫用戶避免其他語言里常見的共享內存訪問的問題
- 為了解決這個問題漓拾,通道提供了一種新模式阁最,從而保證并發(fā)修改時的數(shù)據(jù)安全
- 需要強調的是,通道并不提供跨goroutine的數(shù)據(jù)訪問保護機制晦攒。如果通過通道傳輸數(shù)據(jù)的一份副本闽撤,那么每個goroutine都持有一份副本,各自對自己的副本做修改是安全的脯颜。當傳輸?shù)氖侵赶驍?shù)據(jù)的指針時哟旗,如果讀和寫是由不同的goroutine完成的,每個goroutine依舊需要額外的同步動作
Go語言的類型系統(tǒng)
Go語言提供了靈活的栋操、無繼承的類型系統(tǒng)闸餐,無需降低運行性能就能最大程度上復用代碼
在Go語言中,一個類型由其他更微小的類型組合而成矾芙,避免了傳統(tǒng)的基于繼承的模型
-
在Go語言中舍沙,不需要聲明某個類型實現(xiàn)了某個接口,編譯器會判斷一個類型的實例是否符合正在使用的接口
類型簡單
Go語言不僅有類似int和string這樣的內置類型剔宪,還支持用戶定義的類型
Go接口對一組行為建模
- 接口用于描述類型的行為拂铡。如果一個類型的實例實現(xiàn)了一個接口,意味著這個實例可以執(zhí)行一組特定的行為葱绒。你甚至不需要去聲明這個實例實現(xiàn)某個接口感帅,只需要實現(xiàn)這組行為就好
內存管理
- Go語言把無趣的內存管理交給專業(yè)的編譯器去做,而讓程序員專注于更有趣的事情
你好地淀,Go
- 用Go語言如何編寫經典的Hello World!應用程序
介紹Go Playground
- Go Playground允許在瀏覽器里編輯并運行go語言代碼 https://play.golang.org/
- 分享Go代碼 Go開發(fā)者使用Playground分享他們的想法失球,測試理論,或者調試代碼帮毁。你也可以這么做实苞。每次使用Playground創(chuàng)建一個新程序之后豺撑,可以點擊Share得到一個用于分享的網址。任何人都能打開這個鏈接黔牵。試試https://play.golang.org/p/U2A-jOE3DCH
1.3 小結
- Go語言是現(xiàn)代的聪轿、快速的,帶有一個強大的標準庫
- Go語言內置對并發(fā)的支持
- Go語言使用接口作為代碼復用的基礎模塊