為什麼我們需要學習Go
用於增加開發人員生產力的語言
“Go will be the server language of the future.” — Tobias Lütke, Shopify
這個語言最初是為了Google的軟體開發需求而設計的。事實証明,Go非常適合任何編寫大型服務器軟體的人。因為Go的核心目標是提高開發人員的工作效率。
大勢所趨
趨勢如此,應該是多數人開始接觸並且學習它的原因。怎麼証明這個趨勢呢?我們透過google趨勢來分析golang的發展趨勢:
除了google趨勢,我們也可以看看golang在TIOBE語言排行榜上面的表現。
可以看到Golang的成長勢頭猛烈,至誕生後僅用十年的時間,便從世界上數以千計的程式語言脫而出。
使用Go為開發語言的企業
Atlassian, Heptio, Digital Ocean, Netflix, Pulimi, Twitch, Google, Microsoft, Reddit, Cloudflare, MongoDB, InfluxDB, Datadog, bookings.com, Rakuten, GitHub, GitLab, Freelancer, Fastly, Netlify, Pivotal, Couchbase, Lyft, Monzo, Uber, Source{d}, srcgraph, …
學習語言的正確姿勢
如果你之前有程式語言的經驗,在30天內學會並精通golang是可行的。
首先你可以從一些golang的經典教材入門,學會golang的基礎。
例如:
-
Learn Go Learn Go Programming - Go Tutorial
- A Tour of Go
接著你可以開始試著用golang實作side project。實作和練習是精通一門程式語言的不二法門,Udemy、Coursera、Youtube和Github都提供了相關豐富的資源,
實作side project的另一個理由是golang的教材通常在教授完基礎就結束了,你必須依靠實作去徹底掌握golang的精髓,特別是使用Go runtines,無OOP等。
Roadmap
以下是我個人30天內學會Golang的roadmap,也是這次鐵人幫的文章目錄。
- 旅程開始
- Why Go?
- 未來無限的可能-golang
- 歷史
- golang創造的目的
- golang優於其他語言的原因
- 環境建置
- linux
- windows
- mac
- work space
- go tool
- 參數variable
- 參數初始化
- 指標pointer
- variable scope
- 垃圾處理機制
- int, floats, strings
- 常用基本庫解析
- fmt
- strings
- constants
- 控制流程
- if else
- for
- switch case
- 資料結構
- arrays
- slices
- variable slices
- hash tables
- maps
- structs
- 網路通訊協定
- RFC (Requests for comments)
- encode & decode
- net/http
- JSON
- 檔案I/O操作
- ioutil
- os
- 方程式
- 參數與回傳值
- call by value, reference
- 傳入 arrays 和 slices
- 如何寫出優良方程式
- 方程式教戰手冊
- first-class value
- 回傳方程
- 可變與延遲
- 類與封裝
- 如何用golang寫”類”
- 封裝
- 指標接收器
- pointer receiver
- reference dereferencing
- 多型
- interface
- interface vs concrete types
- interface應用
- 型態確認
- 錯誤處理
- 平行運算
- 馮諾伊曼 瓶頸
- power wall
- concurrent vs parallel
- hiding latency
- 進程
- 排程
- 線程 vs goruntines
- 交錯
- 競爭條件
- goruntines
- exiting gorountines
- 基本同步
- 等待群組
- 通訊
- 阻塞
- 緩衝
- 選擇
- 相互排斥
- 互斥
- 互斥方法
- once synchronization
- deadlock
- dining phiosophers
- 實戰
- 如何從網路找尋資源
- Stackoverflow
- youtube
- github
- 作品demo
- 挑戰落幕