Golang 计算目录中代码的行数

前端之家收集整理的这篇文章主要介绍了Golang 计算目录中代码的行数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

程序名字

countline

os 包来获取运行参数

运行的时候要提供两个参数,一个是目录,一个是扩展名
如:
countline . go

没有运行参数的就退出程序

  1. if len(os.Args) != 3 {
  2. fmt.Println("countline [Dir] [extention]")
  3. return
  4. }

计算文件有多少个 ‘\n’

  1. func countFileLine(name string) (count int64,err error) {
  2. fmt.Println("count file:",name)
  3. data,err := IoUtil.ReadFile(name)
  4. if err != @H_404_42@nil {
  5. return
  6. }
  7. count = 0
  8. for i := 0; i < len(data); i++ {
  9. if data[i] == '\n' {
  10. count++
  11. }
  12. }
  13. fmt.Println("line:",count)
  14. return
  15. }

遍历目录

  1. filepath.Walk(os.Args[1],func(path string,info os.FileInfo,err error) error {
  2. if getExt(path) == os.Args[2] {
  3. fmt.Println(path)
  4. n,e := countFileLine(path)
  5. if e == @H_404_42@nil {
  6. fmt.Println("lines: ",n)
  7. sum = sum + n
  8. }
  9. }
  10. return @H_404_42@nil
  11. })

filepath.Walk会第二个成员是一个函数,其中的path就是遍历得到的文件路径,经过判断它是一个文件,就直接读出来。

完整代码:

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "io/IoUtil"
  6. "os"
  7. "path/filepath"
  8. "strings"
  9. )
  10.  
  11. var (
  12. sum int64
  13. )
  14.  
  15. func main() {
  16. if len(os.Args) != 3 {
  17. fmt.Println("countline [Dir] [extention]")
  18. return
  19. }
  20. filepath.Walk(os.Args[1],n)
  21. sum = sum + n
  22. }
  23. }
  24. return @H_404_42@nil
  25. })
  26. fmt.Println("total lines: ",sum)
  27. }
  28.  
  29. //获取文件的扩展名,最后一个.后面的内容
  30. func getExt(f string) (ext string) {
  31. // fmt.Println("ext:",f)
  32. index := strings.LastIndex(f,".")
  33. data := []byte(f)
  34. for i := index + 1; i < len(data); i++ {
  35. ext = ext + string([]byte{data[i]})
  36. }
  37. return
  38. }
  39.  
  40. func countFileLine(name string) (count int64,count)
  41. return
  42. }

猜你在找的Go相关文章