2021 年你寫了多少代碼?這個(gè) Go 工具幫你統(tǒng)計(jì)
閱讀本文大概需要 4?分鐘。
大家好,我是 polarisxu。
2021 年馬上要過完了,一年下來,你寫了多少代碼?其中 Go 代碼又有多少呢?雖然大家一般討厭將代碼行數(shù)作為考核業(yè)績指標(biāo),但我們自己對一年的代碼量有一個(gè)基本掌握還是挺有必要的。
如果你搜索,會發(fā)現(xiàn)代碼統(tǒng)計(jì)工具有很多。比如 sloccount[1]、github.com/AlDanial/cloc 等,似乎大家很喜歡統(tǒng)計(jì)代碼行數(shù)。當(dāng)然,也有人直接使用 grep、awk 之類的工具。
本文簡單對比兩個(gè)工具:cloc 和 scc。
這兩個(gè)工具的原理類似。在 Mac 下,通過 brew 安裝:
$?brew?install?cloc?scc
其中 cloc 使用 Perl 實(shí)現(xiàn),有 13.1k+ Star;而 scc 是 Go 實(shí)現(xiàn)的,項(xiàng)目地址:https://github.com/boyter/scc,有 3k+ Star。
使用這兩個(gè)工具統(tǒng)計(jì) github.com/studygolang/studygolang 項(xiàng)目。
$?cloc?.
????4287?text?files.
????4028?unique?files.
Complex?regular?subexpression?recursion?limit?(32766)?exceeded?at?/usr/local/Cellar/cloc/1.82/libexec/bin/cloc?line?9334.
?????580?files?ignored.
github.com/AlDanial/cloc?v?1.82??T=5.68?s?(658.0?files/s,?85679.8?lines/s)
--------------------------------------------------------------------------------
Language??????????????????????files??????????blank????????comment???????????code
--------------------------------------------------------------------------------
JavaScript?????????????????????2458??????????32504??????????90981?????????174284
JSON????????????????????????????415????????????127??????????????0??????????86826
Markdown????????????????????????359??????????13566??????????????0??????????31219
Go??????????????????????????????200???????????4962???????????2238??????????20772
HTML????????????????????????????153???????????1019?????????????79??????????14358
CSS??????????????????????????????42???????????1219????????????292???????????6952
YAML?????????????????????????????45?????????????56?????????????12???????????1209
SQL???????????????????????????????2?????????????74??????????????0????????????847
XML??????????????????????????????10????????????137????????????489????????????790
TypeScript???????????????????????15?????????????33????????????228????????????293
SVG??????????????????????????????15??????????????0??????????????0????????????279
INI???????????????????????????????2?????????????41?????????????46????????????144
XSLT??????????????????????????????1??????????????8??????????????1????????????101
make??????????????????????????????6?????????????44??????????????4?????????????95
Bourne?Shell??????????????????????3??????????????9?????????????11?????????????50
DOS?Batch?????????????????????????4?????????????26??????????????0?????????????44
diff??????????????????????????????1??????????????6?????????????20?????????????25
Nix???????????????????????????????1??????????????1??????????????0?????????????19
zsh???????????????????????????????1??????????????4?????????????14??????????????7
Bourne?Again?Shell????????????????1??????????????4?????????????16??????????????7
Dockerfile????????????????????????1??????????????4??????????????1??????????????5
CoffeeScript??????????????????????2??????????????1??????????????0??????????????1
--------------------------------------------------------------------------------
SUM:???????????????????????????3737??????????53845??????????94432?????????338327
--------------------------------------------------------------------------------
統(tǒng)計(jì)花了近 6 秒。
$?scc
───────────────────────────────────────────────────────────────────────────────
Language?????????????????Files?????Lines?????Code??Comments???Blanks?Complexity
───────────────────────────────────────────────────────────────────────────────
JavaScript????????????????2523????298987???207834?????63356????27797??????33769
JSON???????????????????????419?????31849????31660?????????0??????189??????????0
Markdown???????????????????375?????46820????32663?????????0????14157??????????0
License????????????????????275??????6279?????5081?????????0?????1198??????????0
Go?????????????????????????200?????27972????20776??????2243?????4953???????4447
HTML???????????????????????154?????15617????14525????????79?????1013??????????0
YAML????????????????????????51??????1303?????1247?????????0???????56??????????0
CSS?????????????????????????44??????8463?????6952???????297?????1214??????????0
Plain?Text??????????????????34????594575???594394?????????0??????181??????????0
TypeScript?Typings??????????17???????741??????367???????340???????34?????????27
SVG?????????????????????????15???????279??????279?????????0????????0??????????0
XML?????????????????????????10??????1416??????790???????516??????110??????????0
Makefile?????????????????????6???????143???????95?????????4???????44??????????6
gitignore????????????????????5????????64???????45?????????3???????16??????????0
Batch????????????????????????4????????70???????42?????????2???????26??????????5
Shell????????????????????????3????????70???????47????????14????????9?????????13
CoffeeScript?????????????????3?????????2????????1?????????0????????1??????????0
Patch????????????????????????2??????1527?????1430?????????0???????97??????????0
SQL??????????????????????????2???????921??????847?????????0???????74??????????0
Nix??????????????????????????1????????20???????19?????????0????????1??????????0
Zsh??????????????????????????1????????25????????6????????15????????4??????????0
Fish?????????????????????????1????????10????????1?????????7????????2??????????0
Dockerfile???????????????????1????????10????????5?????????1????????4??????????0
BASH?????????????????????????1????????27????????6????????17????????4??????????0
───────────────────────────────────────────────────────────────────────────────
Total?????????????????????4147???1037190???919112?????66894????51184??????38267
───────────────────────────────────────────────────────────────────────────────
Estimated?Cost?to?Develop?$34,924,659
Estimated?Schedule?Effort?59.194452?months
Estimated?People?Required?69.888518
───────────────────────────────────────────────────────────────────────────────
scc 速度很快,幾乎瞬間完成。
這兩個(gè)工具的功能類似,但也會有差別。不過 scc 速度快很多,無疑,大家應(yīng)該會更喜歡 Go 語言實(shí)現(xiàn)的 scc。
scc,又叫做 ?Sloc、Cloc 和 Code,即取這三個(gè)單詞的首字母:SCC。scc 是一個(gè)非常快速準(zhǔn)確的代碼計(jì)數(shù)器,具有復(fù)雜度計(jì)算和 COCOMO 估計(jì),用純 Go 編寫。
scc 允許查看代碼使用的每種編程語言、行數(shù)、注釋、文件等。這是一個(gè)非常快速且有用的工具。大部分語言 scc 都支持,通過 scc --languages 查看支持的語言,目前有 201 種。
在第一屆 GopherCon AU 上 scc 作者 boyter 作了關(guān)于 scc 設(shè)計(jì)和實(shí)現(xiàn)的演講,這里有 PPT:https://boyter.org/static/gophercon-syd-presentation/,也有視頻:https://www.youtube.com/watch?v=jd-sjoy3GZo。
關(guān)于 scc 的更多信息,可以訪問項(xiàng)目首頁查看:https://github.com/boyter/scc。
如果要統(tǒng)計(jì) 2021 年你寫了多少代碼,可能不是簡單地運(yùn)行 scc 就能搞定,因?yàn)槎喟氪a不是你一個(gè)人寫的,可能需要借助 git 輔助。有興趣的小伙伴可以研究研究。
參考資料
sloccount: https://dwheeler.com/sloccount/
我是 polarisxu,北大碩士畢業(yè),曾在 360 等知名互聯(lián)網(wǎng)公司工作,10多年技術(shù)研發(fā)與架構(gòu)經(jīng)驗(yàn)!2012 年接觸 Go 語言并創(chuàng)建了 Go 語言中文網(wǎng)!著有《Go語言編程之旅》、開源圖書《Go語言標(biāo)準(zhǔn)庫》等。
堅(jiān)持輸出技術(shù)(包括 Go、Rust 等技術(shù))、職場心得和創(chuàng)業(yè)感悟!歡迎關(guān)注「polarisxu」一起成長!也歡迎加我微信好友交流:gopherstudio
