コードの線
5787 ワード
どのように多くの行のコードが我々のプロジェクトにあるかチェックするために、単純なカウンタを作りましょう.
シンプルな機能から始めたい.
私たちは、ラインが空であるならば2つのものをチェックします、そして、線がどんな種類のコメントでもあるならば.Golangでは/で始まる行コメントもあります.この関数は、行またはエラーの数を返します.
最後に、少なくとも我々は、主な機能があります.
私は、我々のlinecounter機能が数を返すたびに、合計に加えます.200行以下の数が文字列に変換され、それがチアルになるか、200 - 1000黄色で、1000以上のすべてが赤であるかどうかを確認します.私も、線の数であらゆるファイルを印刷します.そして最後に、すべての行の合計を印刷します.
最後に完成したコード.
シンプルな機能から始めたい.
func LineCounter(r string) (int, error) {
var count int
rr := strings.Split(r, "\n")
var rrr []string
cc := 0
comstart := false
for _, str := range rr {
if strings.HasPrefix(str, "/*") {
comstart = true
continue
}
if strings.Contains(str, "*/") {
comstart = false
cc += 1
}
if (str != "" && !strings.HasPrefix(str, "//") && !comstart) {
rrr = append(rrr, str)
}
}
count = len(rrr) - cc
return count, nil
}
この関数はいくつかのテキストを取り、\\n "(改行記号)で全ての行を分割します.私たちは、ラインが空であるならば2つのものをチェックします、そして、線がどんな種類のコメントでもあるならば.Golangでは/で始まる行コメントもあります.この関数は、行またはエラーの数を返します.
var (
Info = Teal
Warn = Yellow
Fata = Red
)
var (
Black = Color("\033[1;30m%s\033[0m")
Red = Color("\033[1;31m%s\033[0m")
Green = Color("\033[1;32m%s\033[0m")
Yellow = Color("\033[1;33m%s\033[0m")
Purple = Color("\033[1;34m%s\033[0m")
Magenta = Color("\033[1;35m%s\033[0m")
Teal = Color("\033[1;36m%s\033[0m")
White = Color("\033[1;37m%s\033[0m")
)
func Color(colorString string) func(...interface{}) string {
sprint := func(args ...interface{}) string {
return fmt.Sprintf(colorString,
fmt.Sprint(args...))
}
return sprint
}
私たちが色のテキストを作成するために使用するコードのこの部分は私が推測説明を必要としません.最後に、少なくとも我々は、主な機能があります.
func main() {
arg := os.Args[1]
all := 0
err := filepath.Walk(arg, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if (!info.IsDir() && !strings.Contains(info.Name(), "test") ){
ext := filepath.Ext(path)
if ext == ".go" {
jj, _ := os.ReadFile(path)
g, _ := LineCounter(string(jj))
all += g
var u string
if g < 200 {
z := strconv.Itoa(g)
u = Info(z)
}
if g >= 200 && g < 1000 {
z := strconv.Itoa(g)
u = Warn(z)
}
if g >= 1000 {
z := strconv.Itoa(g)
u = Fata(z)
}
fmt.Printf("File %s have %s lines of code \n",path, u)
}
}
return nil
})
if err != nil {
log.Println(err)
}
fmt.Println("All lines", all)
}
ここでは、コンソールからのパスを取得し、パスがフォルダでないかどうかを再帰的にチェックします.パスがフォルダーでない場合(ファイルである)、ファイルが“go”拡張子を持つ場合.ファイル名が"test "の単語かどうかチェックします.テストファイルを数える必要はありません(Golangのテストファイルでは、名前の後にテストを入れなければなりません).私は、我々のlinecounter機能が数を返すたびに、合計に加えます.200行以下の数が文字列に変換され、それがチアルになるか、200 - 1000黄色で、1000以上のすべてが赤であるかどうかを確認します.私も、線の数であらゆるファイルを印刷します.そして最後に、すべての行の合計を印刷します.
最後に完成したコード.
package main
import (
"fmt"
"log"
"os"
"path/filepath"
"strconv"
"strings"
)
var (
Info = Teal
Warn = Yellow
Fata = Red
)
var (
Black = Color("\033[1;30m%s\033[0m")
Red = Color("\033[1;31m%s\033[0m")
Green = Color("\033[1;32m%s\033[0m")
Yellow = Color("\033[1;33m%s\033[0m")
Purple = Color("\033[1;34m%s\033[0m")
Magenta = Color("\033[1;35m%s\033[0m")
Teal = Color("\033[1;36m%s\033[0m")
White = Color("\033[1;37m%s\033[0m")
)
func Color(colorString string) func(...interface{}) string {
sprint := func(args ...interface{}) string {
return fmt.Sprintf(colorString,
fmt.Sprint(args...))
}
return sprint
}
func main() {
arg := os.Args[1]
all := 0
err := filepath.Walk(arg, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if (!info.IsDir() && !strings.Contains(info.Name(), "test") ){
ext := filepath.Ext(path)
if ext == ".go" {
jj, _ := os.ReadFile(path)
g, _ := LineCounter(string(jj))
all += g
var u string
if g < 200 {
z := strconv.Itoa(g)
u = Info(z)
}
if g >= 200 && g < 1000 {
z := strconv.Itoa(g)
u = Warn(z)
}
if g >= 1000 {
z := strconv.Itoa(g)
u = Fata(z)
}
fmt.Printf("File %s have %s lines of code \n",path, u)
}
}
return nil
})
if err != nil {
log.Println(err)
}
fmt.Println("All lines", all)
}
func LineCounter(r string) (int, error) {
var count int
rr := strings.Split(r, "\n")
var rrr []string
cc := 0
comstart := false
for _, str := range rr {
if strings.HasPrefix(str, "/*") {
comstart = true
continue
}
if strings.Contains(str, "*/") {
comstart = false
cc += 1
}
if (str != "" && !strings.HasPrefix(str, "//") && !comstart) {
rrr = append(rrr, str)
}
}
count = len(rrr) - cc
return count, nil
}
私はいくつかのあなたの一部は、それがどのように動作し、また、Windowsシステム上で動作するかを教えてください.Reference
この問題について(コードの線), 我々は、より多くの情報をここで見つけました https://dev.to/bajwolf/lines-of-code-golang-5gd8テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol