path = "C:\\wahaha"

key = ".go"

func CountLineNum(path, key string) (count int) {
    files, err := ioutil.ReadDir(path)
    if err == nil {
        for _, fileInfo := range files {
            newPath := path + "\\" + fileInfo.Name()
            if fileInfo.IsDir() {
                count += CountLineNum(newPath, key)
            } else if strings.Contains(fileInfo.Name(), key) {
                file, err := os.Open(newPath)
                if err == nil {
                    fileBuf := bufio.NewReader(file)
                    lineSum := 0
                    for {
                        _, err := fileBuf.ReadString('\n')
                        lineSum++
                        if err == io.EOF {
                            break
                        }
                    }
                    file.Close()
                    count += lineSum
                }
            }
        }
    }
    return count
}