1. 程式人生 > >你離十萬行程式碼還差多遠?(程式實現)

你離十萬行程式碼還差多遠?(程式實現)

前言

自古程式設計界流傳著這樣一個傳說,十萬行程式碼堆出一個程式大牛,所以我們很多小白們都奮鬥在敲程式碼的路上,那麼我們究竟離那十萬行程式碼還差多遠呢?!
這個程式的靈感就來源於此。我們將用golang實現出你離十萬行程式碼的距離!

分析

此程式的關鍵在於能夠深度挖掘目錄中的所有.go檔案,發現.go檔案則讀取檔案中的行數,若是資料夾,則重複呼叫函式,形成遞迴函式,就像linux系統中刪除帶有內容的資料夾需要用到-r一樣,使用遞迴處理這樣的問題最為方便直接,下面讓我們進入程式碼仔細分析!

程式碼

package main

import (
	"fmt"
	"os"
"log" "strings" "bufio" ) func countline(url string) { fmt.Println("程式碼讀取完畢") fp,err:=os.Open(url) //開啟.go檔案 if err!=nil { log.Fatal(err) } defer fp.Close() //使用bufio包下的newscannner方法來數行 input:=bufio.NewScanner(fp) for input.Scan(){ //每多一行則全域性變數a加一 a++ } } func findgo(url string) { dp,
err:=os.OpenFile(url,os.O_RDONLY,os.ModeDir) //開啟根目錄,並掃描其中所有檔案 if err!=nil { log.Fatal(err) return } defer dp.Close() fileinfo,err:=dp.Readdir(-1) if err!=nil { log.Fatal(err) return } for _,info:=range fileinfo{ //遍歷所有檔案,若是資料夾,則將此資料夾目錄作為引數,重複呼叫此函式 if info.IsDir() { findgo(url+"/"+info.
Name()) }else if strings.HasSuffix(info.Name(),".go") { //若是.go檔案,則呼叫數行countline函式 countline(url+"/"+info.Name()) } } } var a int=0 func main() { var url string fmt.Println("請輸入您go程式碼所在根目錄:") fmt.Scan(&url) //此函式用於尋找使用者提供的目錄下的所有.go檔案 findgo(url) score:=float32(a)/100000.0*100.0 //結束後進行人性化輸出 fmt.Printf("您已經敲了%d行程式碼\n十萬行程式碼的目標已經完成%.2f%%了,繼續努力哦!!!",a,score) }

最後

程式並不難,只是一個很有意思的小程式,大家不妨試試看,看看自己離十萬行程式碼的目標還差多少。(大牛請自動忽略)