Golang程序常見的問題這裏激勵一下, 這些都是比較常見的問題。
儘量避免用ReadString
默認是從reader 六裏面讀取一個字符串, 知道讀取到‘\n’爲止, 這裏, 最大能夠讀取的數據量是64K, 超過了64K就會出現錯誤。
hang住問題處理
channel的使用
常見的問題就是, 一個channel的一段負責向channel裏面添加數據, 另一端負責從管道里面消費數據, 但是有可能消費端一直沒有來得及消費掉數據, 導致隊列裏面的數據一直是舊的數據。
另一方面, 在讀channel的時候, 要先檢查channel是否已經被關閉了, 否則可能導致程序異常。
讀寫鎖問題
常見問題是,一個線程加了所, 但是沒有解鎖, 其他線程一直等待所。比較好的做法是成對的使用lock和unlock函數, 確保鎖定的過程集中在一個函數裏面, 並且無論如何, 鎖定以後解鎖都不會丟失。
命名管道
通常在golang下面, 我們都會使用os/exec下面的command的Stderr, 需要注意的是, 我們在運行的程序中, 不能把各種info或者warning都寫入到cerr或者stderr中, 不然導致程序輸出端, 獲得大量的信息。
使用http儘量是定超時時間
在調用很頻繁的程序中, 就像監控數據採集或者節點存活檢查, 需要在HTTP不同機器之間調用的時候, 設定timeout, 否則的話, 如果有一個調用異常, 就會導致後面的調用收到影響。