曹大帶我學 Go(9)—— 開始積累自己的工具庫
你好,我是小 X。
曹大最近開 Go 課程了,小 X 正在和曹大學 Go。
這個系列會講一些從課程中學到的讓人醍醐灌頂的東西,撥雲見日,帶你重新認識 Go。
不知道你有沒有這樣的經驗:看了很多計算機相關的書,覺得自己懂得很多,但是一遇到實際問題,就不會解。
再看身邊的老司機,執行幾行命令,看了幾個指標,就準確地定位問題了。他可能也沒看那麼多理論,但實戰能力確實強,心裏一下子就失衡了。
這其中有很多原因,我認爲其中有一個比較重要的就是:工具的使用。老司機因爲經驗多,積累了很多 命令、shell 腳本、代碼庫…… 這些東西就像瑞士軍刀,關鍵時刻,直接就可以派上大用場。在線上出問題的時候,雲淡風輕地說,這行代碼有問題,刪掉就可以了。瀟灑至極!
今天我就把我最近積累的一些工具,包括一些軟件、命令,這些是可以直接用於實戰的。希望看完之後,能提升你的戰鬥力。
效率工具
今天推薦 2 個我日常用得比較多的,提升效率的軟件:aText、paste。
aText
aText
是一個輸入映射的軟件,輸入預先設定的字符串,就可以轉成設定好的目標字符串。我用 aText 存了很多有用的映射,例如,我把打開博客文章的命令縮寫成了 XPosts
:
因爲博客文件所在的路徑比較長,如果我每次都直接敲出完整路徑的話,會很麻煩。有了這個映射後,只用輸入 XPosts
就自動變成了我要的文件路徑。
還有很多場景可以使用 aText
,尤其是你經常要輸入的相同的內容,非常方便。
paste
paste
管理剪貼版的歷史,只要是你複製過的內容,它都會保存下來,甚至可以對文本內容進行搜索。
比如可以把開發、排查問題時常用的鏈接、命令都放到一個 tab 下面,要用的時候,直接快捷鍵調出,怎一個優雅了得。
命令
這部分挑了一些非常有用的命令出來,大家可以記在筆記裏,關鍵時候直接拿出來用。
查看 cache size
看 Go 源碼的時候,經常能看到一些 pad 字段,這個字段主要是用來防止 false sharing
,一般是根據 cache line size 來算 pad 大小的。那麼查看這個 size 的大小呢?
getconf LEVEL1_DCACHE_LINESIZE
查看內核版本
有時候會遇到一些和內核版本相關的問題,例如 Go 語言裏面的內存歸還策略在 Go 1.12 有一個改動,將 MADV_DONTNEED
改成了 MADV_FREE
,導致線上應⽤的 RSS ⼤幅上升。
使用
MADV_FREE
方式,程序內存不會立刻回收,即 RSS 值不會立刻下降,只有當 OS 內存緊缺時纔會回收 Go 程序的內存;
而 Go 1.11 以及之前的版本默認採用的是
MADV_DONTNEED
方式,程序 RSS 值下降很快。
因此如果需要使程序內存佔用下降很慢的話,可設置環境變量
GODEBUG=madvdontneed=1
。
另外,MADV_FREE
只在 Linux 4.5 及之後的版本纔有,所以當你遇到 RSS 一直降不下去的場景時,要想確認是不是這個問題導致的,還得看你的內核版本是啥。那就用這個命令:
uname -a
這個歸還內存的策略在 Go 1.16 又改回去了。因此只有在 Go 1.12-Go 1.15 之間,且是 Linux 4.5 及之後的內核版本纔會有這個問題。
輸出代碼行號
有時候需要用 cat
命令輸出一段代碼,截圖發給別人。這時如果需要對着代碼行號做一些說明的話,把代碼行號一併輸出來是非常 nice 的,只需要用這個命令:
cat -n a.go
彙總展示代碼構成
當我們想看一個開源項目的代碼行數的時候,並且能看到各種類型的語言各佔多少的時候,怎麼辦呢?一個命令搞定:
tokei ./
就問你強不強!
這個用在什麼場景呢?太多了,例如你準備看一個稍微簡單一點的框架,有幾個侯選的:chi, echo, gin…… 執行一下命令,看看代碼行數,選擇一個最少的。
後記
工具是很重要的,積累了很多前人的智慧,我們拿來直接用,不需要自己再從零開始。當然,適當地學習原理也是必須的。
我們要記住這些命令,存入自己的工具庫,要用的時候直接調出來。它們可以節省我們大腦的內存,把寶貴的資源用在思考真正的問題上,而不是記住這些命令。
而且當我們有了自己的代碼碼、腳本庫、工具庫的時候,遇到問題,拿上相應的傢伙上場,馬上就可以得到很多相關的信息,我們再根據這些信息做決策。
今天就先列這些吧,其實還準備了好幾個關於 Go 的,先不放出來。如果這篇比較受歡迎,就下期再寫了。
最後,也歡迎在留言區分享你的工具,無論是軟件,還是一行命令。我會彙總後再分享給大家,切實有效地提升大家的能力。
好了,這就是今天全部的內容了~ 我是小 X,我們下期再見~
歡迎關注曹大的 TechPaper 以及碼農桃花源~
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/MS0LY9pf3m6p56MtlYyN6A