1.用 Go 解決現代程式設計難題
1.1 在快速開發和性能之間做出選擇?
go不僅提供了高性能,同時也讓開發更快速。C/C++這類語言提供了很快的執行速度,而Ruby/Python 這
類語言則擅長快速開發。
1.2 go語言内置并發機制
Go語言對并發的支援是這門語言最重要的特性之一。goroutine很像線程,但是它占用的記憶體遠少于線程
使用它需要的代碼更少。
channel是一種内置的資料結構,可以讓使用者在不同的goroutine之間同步發送具有類型的消息。這讓程式設計
模型更傾向于在 goroutine之間發送消息,而不是讓多個goroutine争奪同一個資料的使用權。
1.3 go編譯速度快
Go語言使用更加智能的編譯器,簡化解決依賴的算法,go編譯器隻會關注那些直接被引用的庫,而不是
像 Java/C/C++那樣,要周遊依賴鍊中所有依賴的庫。
1.4 Go語言的類型系統簡單且高效
不需要為面向對象開發付出額外的心智,讓開發者能專注于代碼複用。
1.5 go語言還自帶垃圾回收器
不需要使用者自己管理記憶體。
2.goroutine
goroutine是可以與其他goroutine并行執行的函數,同時也會與主程式(程式的入口)并行執行。在其他程式設計語
言中,你需要用線程來完成同樣的事情,而在Go語言中會使用同一個線程來執行多個goroutine。
3.channel
通道是一種資料結構,可以讓 goroutine 之間進行安全的資料通信。通道可以幫使用者避免其他語言裡常見的共享
記憶體通路的問題。通道這一模式保證同一時刻隻會有一個goroutine修改資料。通道用于在幾個運作的goroutine之
間發送資料。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yN4YTM4gjYjhTO4QWZ2QjNzYzXwAjN0kDM0AzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
4.go語言的類型系統
4.1 類型簡單
Go語言提供了靈活的、無繼承的類型系統,無需降低運作性能就能最大程度上複用代碼。Go開發者使用組合設
計模式,隻需簡單地将一個類型嵌入到另一個類型,就能複用所有的功能。一個類型由其他更微小的類型組合
而成,避免了傳統的基于繼承的模型。不過 Go 語言的類型可以聲明操作該類型資料的方法。
4.2 Go接口對一組行為模組化
Go語言還具有獨特的接口實作機制,允許使用者對行為進行模組化,而不是對類型進行模組化。
Go語言的接口更小,隻傾向于定義一個單一的動作。傳統的面向對象程式設計語言的接口系統有本質的差別。
Go語言的整個網絡庫都使用了 io.Reader 接口,将程式的功能和不同網絡的實作分離。
總結: