原本的計畫是寫系列文,一天嗑一點,雖然完整影片約17小時,分批消化卻花了我近10天,現在回去看我第一天寫的草稿,編輯時間已經是半年前...。
如果目標是快速學完下列項目,在Youtube上多的是1~2小時以內的教學,看完後直接開刷Leetcode熟悉語法會更有效率。
如果目標是理解背後底層的設計,更多進階的應用,那麼這堂課可以說是含金量很高的課程。部分涉及到計算機概論、作業系統、硬體相關的知識,大多時候講師會改以圖示畫出應用場景的模型,尤其是 buffered channel應用的各式pattern,因此不建議初學就上這門課。
以下節錄幾個比較有收穫的章節:
對比其他語言而言,這章節在探討的是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寄來的通知信件...
偵測到疑似異常的登入行為,我們將對您的帳號進行封鎖...