Golang 计算目录中代码的行数
2015-05-29 13:18
330 查看
程序名字
countlineos 包来获取运行参数
运行的时候要提供两个参数,一个是目录,一个是扩展名如:
countline . go
没有运行参数的就退出程序
if len(os.Args) != 3 { fmt.Println("countline [Dir] [extention]") return }
计算文件有多少个 ‘\n’
func countFileLine(name string) (count int64, err error) { fmt.Println("count file:", name) data, err := ioutil.ReadFile(name) if err != nil { return } count = 0 for i := 0; i < len(data); i++ { if data[i] == '\n' { count++ } } fmt.Println("line:", count) return }
遍历目录
filepath.Walk(os.Args[1], func(path string, info os.FileInfo, err error) error { if getExt(path) == os.Args[2] { fmt.Println(path) n, e := countFileLine(path) if e == nil { fmt.Println("lines: ", n) sum = sum + n } } return nil })
filepath.Walk会第二个成员是一个函数,其中的path就是遍历得到的文件路径,经过判断它是一个文件,就直接读出来。
完整代码:
package main
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"strings"
)
var (
sum int64
)
func main() {
if len(os.Args) != 3 {
fmt.Println("countline [Dir] [extention]")
return
}
filepath.Walk(os.Args[1], func(path string, info os.FileInfo, err error) error {
if getExt(path) == os.Args[2] {
fmt.Println(path)
n, e := countFileLine(path)
if e == nil {
fmt.Println("lines: ", n)
sum = sum + n
}
}
return nil
})
fmt.Println("total lines: ", sum)
}
//获取得文件的扩展名,最后一个.后面的内容
func getExt(f string) (ext string) {
// fmt.Println("ext:", f)
index := strings.LastIndex(f, ".")
data := []byte(f)
for i := index + 1; i < len(data); i++ {
ext = ext + string([]byte{data[i]})
}
return
}
func countFileLine(name string) (count int64, err error) { fmt.Println("count file:", name) data, err := ioutil.ReadFile(name) if err != nil { return } count = 0 for i := 0; i < len(data); i++ { if data[i] == '\n' { count++ } } fmt.Println("line:", count) return }
相关文章推荐
- c# sendKey()
- Python Version 2.7 required which was not found in the registry
- Java项目设置session超时(失效)的三种方式
- Netty的并发编程实践3:CAS指令和原子类
- java值传递思考
- Django笔记(1)
- 加加减减有副作用, C/C++er 请小心
- python之类
- Java 的 HTML 解析器
- Java枚举类用法实例
- Category
- POI 注解方式 导入导出 excel , 只依赖于 POI包
- eclipse代码软件自动生成uml类图
- 最大公约数与最小公倍数
- java.lang.IllegalStateException: no found the liblocSDK4d.so file, please correct settings
- java基础整理——父类引用指向子类对象实体的多态
- Java基于socket实现简易聊天室实例
- MyEclipse 2015优化技巧
- java虚拟机精讲 读后
- 编写Python脚本把sqlAlchemy对象转换成dict的教程