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

CNbluer · 2018-11-05 20:05:08 · 3335 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-11-05 20:05:08 的主题,其中的信息可能已经有所发展或是发生改变。

前言

自古编程界流传着这样一个传说,十万行代码堆出一个程序大牛,所以我们很多小白们都奋斗在敲代码的路上,那么我们究竟离那十万行代码还差多远呢?! 这个程序的灵感就来源于此。我们将用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)
}

最后

程序并不难,只是一个很有意思的小程序,大家不妨试试看,看看自己离十万行代码的目标还差多少。(大牛请自动忽略)


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

第 1 条附言  ·  2018-11-05 20:39:26

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

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

3335 次点击  
加入收藏 微博
7 回复  |  直到 2018-11-09 11:15:45
sgsgy5
sgsgy5 · #1 · 6年之前

还不错继续加油

xixihaha
xixihaha · #2 · 6年之前

666666

CNbluer
CNbluer · #3 · 6年之前

@sgsgy5 嗯嗯 加油

SugarAYuan
SugarAYuan · #4 · 6年之前

0.0有个小疑问。。如果引了很多外部的包咋办··?

CNbluer
CNbluer · #5 · 6年之前

@SugarAYuan 额 你这个问题难住我了,我的外部包一般放在github文件夹下的,或许可以加一段代码,遇到github名的文件夹直接跳过。

aixinaxc
aixinaxc · #6 · 6年之前

加油

Joyboo
Joyboo · #7 · 6年之前

不知道整天加班造轮子算不算

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