更新於 2024/11/24閱讀時間約 4 分鐘

【Go】學習資源紀錄:Ultimate Go Programming(Ardan Labs)

前言

原本的計畫是寫系列文,一天嗑一點,雖然完整影片約17小時,分批消化卻花了我近10天,現在回去看我第一天寫的草稿,編輯時間已經是半年前...。

如果目標是快速學完下列項目,在Youtube上多的是1~2小時以內的教學,看完後直接開刷Leetcode熟悉語法會更有效率。

  • variable
  • type
  • condition
  • loop
  • function
  • pointer
  • struct
  • interface
  • channel
  • goroutine


如果目標是理解背後底層的設計,更多進階的應用,那麼這堂課可以說是含金量很高的課程。部分涉及到計算機概論、作業系統、硬體相關的知識,大多時候講師會改以圖示畫出應用場景的模型,尤其是 buffered channel應用的各式pattern,因此不建議初學就上這門課。


以下節錄幾個比較有收穫的章節:


Sememtic(語意)

  • value sementic
  • pointer sementic


對比其他語言而言,這章節在探討的是call by reference / value,更具體一點的細節是變數產生在stack / heap上。

在go語言中有自己的GC(Garbage Collection)機制,因此不需要像C/C++顧慮很多細節。其中的escape analysis也會在進行編譯時先分析程式碼,在決定優化調整後,實際要把功能建立在stack上還是heap。


小節的最後也提供了一些基本的原則:

1. 在創建的時候,使用value sementic
2. 在使用函式進行呼叫時,使用pointer sementic作為參數傳遞或回傳值


測試工具

go內建測試工具,不需要另外倚賴第三方套件,其中比較感興趣的是執行benchmark以及pprof。


如何知道程式碼優化了多少? --> 跑測試
如何知道哪個解法比較好? --> 跑測試


課程中使用了fmt.Sprint()fmt.Sprintf()進行benchmark測試,猜猜哪個性能好?

大多數人都猜fmt.Sprint()是比較佳的解法,畢竟少做了格式化輸出,而實際出來的結果數據卻恰好相反。


效能分析

另外一個印象深刻的工具是pprof,畢竟以往工作上有需要做效能監控跟優化的議題,當時使用Dynatrace紀錄上的項目,逐層request去檢視執行時間跟資源使用率。

pprof做的事情類似Dynatrace,可以把時間內執行的該項程式列出資源使用的剖面分析、hot spot集中在哪部分、程式呼叫的階層等資訊呈現出來。


小結

查了一下發現,Ardan Labs也是官網推薦的學習教材之一,主要還是以培訓為主,課程內容也比較深入。如果你是比較希望有大量程式碼範例可以跟著動手實做的人,那麼此課程或許不是那麼對味。


以初學者而言,Udemy上的Go: The Complete Developer's Guide倒是比較好上手,想當時練習goroutine跟channel發請求給各個網站,隔天馬上收到Linkedin寄來的通知信件...


偵測到疑似異常的登入行為,我們將對您的帳號進行封鎖...

參考資源

  • Ardan Labs
  • Go: The Complete Developer's Guide - Stephen Grider (初學用)


分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.