你离十万行代码还差多远?(go语言程序实现)

CNbluer · · 2953 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

前言 -- 自古编程界流传着这样一个传说,十万行代码堆出一个程序大牛,所以我们很多小白们都奋斗在敲代码的路上,那么我们究竟离那十万行代码还差多远呢?! 这个程序的灵感就来源于此。我们将用golang实现出你离十万行代码的距离! 分析 -- 此程序的关键在于能够深度挖掘目录中的所有.go文件,发现.go文件则读取文件中的行数,若是文件夹,则重复调用函数,形成递归函数,就像linux系统中删除带有内容的文件夹需要用到-r一样,使用递归处理这样的问题最为方便直接,下面让我们进入代码仔细分析! 代码 -- ```go 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) } ``` 最后 -- 程序并不难,只是一个很有意思的小程序,大家不妨试试看,看看自己离十万行代码的目标还差多少。(大牛请自动忽略)

有疑问加站长微信联系(非本文作者)

第 1 条附言  · 
感兴趣的朋友可以关注我的CSDN,还有很多分享,一起学go https://blog.csdn.net/weixin_42940826

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2953 次点击  
加入收藏 微博
7 回复  |  直到 2018-11-09 11:15:45
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传