iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 1
1
Software Development

Golang入門到進階實戰系列 第 1

Golang旅程開始

為什麼我們需要學習Go

用於增加開發人員生產力的語言

“Go will be the server language of the future.” — Tobias Lütke, Shopify

https://ithelp.ithome.com.tw/upload/images/20190916/201206982rMvm2HUuu.jpg
這個語言最初是為了Google的軟體開發需求而設計的。事實証明,Go非常適合任何編寫大型服務器軟體的人。因為Go的核心目標是提高開發人員的工作效率。

大勢所趨

趨勢如此,應該是多數人開始接觸並且學習它的原因。怎麼証明這個趨勢呢?我們透過google趨勢來分析golang的發展趨勢:
https://ithelp.ithome.com.tw/upload/images/20190916/20120698gIlJkoYEsb.png
除了google趨勢,我們也可以看看golang在TIOBE語言排行榜上面的表現。
https://ithelp.ithome.com.tw/upload/images/20190916/20120698ti5UyHhqPJ.png
可以看到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, …
https://ithelp.ithome.com.tw/upload/images/20190916/20120698ngU2ZgpyST.png

學習語言的正確姿勢

如果你之前有程式語言的經驗,在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,也是這次鐵人幫的文章目錄。

  1. 旅程開始
  2. Why Go?
    • 未來無限的可能-golang
    • 歷史
    • golang創造的目的
    • golang優於其他語言的原因
  3. 環境建置
    • linux
    • windows
    • mac
  4. work space
    • go tool
  5. 參數variable
    • 參數初始化
    • 指標pointer
    • variable scope
    • 垃圾處理機制
    • int, floats, strings
  6. 常用基本庫解析
    • fmt
    • strings
  7. constants
  8. 控制流程
    • if else
    • for
    • switch case
  9. 資料結構
    • arrays
    • slices
    • variable slices
  10. hash tables
    • maps
  11. structs
  12. 網路通訊協定
    • RFC (Requests for comments)
    • encode & decode
    • net/http
    • JSON
  13. 檔案I/O操作
    • ioutil
    • os
  14. 方程式
    • 參數與回傳值
    • call by value, reference
    • 傳入 arrays 和 slices
  15. 如何寫出優良方程式
    • 方程式教戰手冊
  16. first-class value
    • 回傳方程
    • 可變與延遲
  17. 類與封裝
    • 如何用golang寫"類"
    • 封裝
  18. 指標接收器
    • pointer receiver
    • reference dereferencing
  19. 多型
    • interface
    • interface vs concrete types
    • interface應用
    • 型態確認
    • 錯誤處理
  20. 平行運算
    • 馮諾伊曼 瓶頸
    • power wall
  21. concurrent vs parallel
    • hiding latency
  22. 進程
    • 排程
    • 線程 vs goruntines
    • 交錯
    • 競爭條件
  23. goruntines
    • exiting gorountines
  24. 基本同步
    • 等待群組
  25. 通訊
    • 阻塞
    • 緩衝
    • 選擇
  26. 相互排斥
    • 互斥
    • 互斥方法
  27. once synchronization
    • deadlock
    • dining phiosophers
  28. 實戰
    • 如何從網路找尋資源
    • Stackoverflow
    • youtube
    • github
  29. 作品demo
  30. 挑戰落幕

下一篇
Day2 聊聊Go的歷史
系列文
Golang入門到進階實戰30

尚未有邦友留言

立即登入留言