曹大带我学 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 以及碼農桃花源~
總結
以上是生活随笔為你收集整理的曹大带我学 Go(9)—— 开始积累自己的工具库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 曹大带我学 Go(8)—— 一个打点引发
- 下一篇: 送给水深火热的 Gopher 们的解药