通向Golang的捷徑【18. 性能優化的代碼示例】

18.1 字符串

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

18.2 數組和 slice

創建變量:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

18.3 map

在這裏插入圖片描述
在這裏插入圖片描述

18.4 結構

創建變量:
在這裏插入圖片描述
在這裏插入圖片描述
使用結構變量名的第一個字母的大寫, 可使結構變量能在包外被訪問 (可見), 通常情況下, 最好使用一個工廠函數, 來定義結構變量, 有時需強制使用, 參見 10.2 節.
在這裏插入圖片描述

18.5 接口

在這裏插入圖片描述

18.6 函數

在這裏插入圖片描述

18.7 文件

在這裏插入圖片描述
在這裏插入圖片描述

18.8 併發協程和併發通道

18.8.1 使用建議

併發執行的效率遠高於串行計算, 同時在併發協程中, 任務的執行成本, 也高於併發線程的創建和通訊的成本.

• 使用帶緩衝的併發通道, 可提升性能
一個帶緩衝的併發通道更容易實現雙向傳輸, 這依賴於上下文環境所給出的性能 (通常可提升 10 倍以上), 如果併發通道的緩存容量進行調整, 還可進一步提升性能.

• 限制放入併發通道的數據量, 而將其放入到數組中
如果在併發協程之間需要傳輸大量數據, 併發通道將變成一個瓶頸, 這時可在數組中, 實現巨量數據的壓
縮, 等完成傳輸後, 再進行解壓, 通常情況下, 可將傳輸速率提升 10 倍以上.
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
• 併發通道的迭代器模式, 參見 14.11 節
• 限制併發請求的數量, 參見 14.11 節
• 在多核處理器中, 實現並行計算, 參見 14.13 節
• 終止一個併發協程
在這裏插入圖片描述
在這裏插入圖片描述
• 讓長時間運行的程序放棄同步操作, 參見 14.5 節
• 使用包含併發通道的計時器和定時器, 參見 14.5 節
• 典型的後臺服務器模式, 參見 14.4 節

18.9 網絡與 web 應用

18.9.1 模板

• 創建, 再解析和驗證一個模板
在這裏插入圖片描述
• 如果在 web 環境中, 可使用 html 過濾器, 轉義 html 特殊字符, 比如 {{html .}}, 或是轉義一個結構數據
域, 如 {{.FieldName |html}}
• 使用模板緩存, 參見 15.7 節

18.10 常見用法

• 當出現錯誤時, 可終止程序
在這裏插入圖片描述

18.11 獲得最佳性能的編程指南

• 在允許的情況下 (函數中), 應使用包含初始化的聲明格式, 即:=.
• 應使用字節數據, 來替代字符串
• 應使用 slice 來替代數組
• 在允許的情況下, 應使用 slice 或數組, 來替代 map
• 如果只需處理數值, 不想理會索引值時, 可在 for-range 循環中, 遍歷一個 slice, 因爲 for-range 的速度稍快
• 如果數組處於稀疏狀態 (包含大量的零值和 nil), 可替換成一個 map, 以減少內存的用量
• 爲 map 類型, 指定一個初始容量
• 在定義方法時, 應使用一個結構指針作爲接收器
• 應使用 constant 或 flag, 來描述代碼中的常量
• 在需要分配大量內存的情況下, 應當使用緩衝
• 應使用模板緩存

在這裏插入圖片描述