GO语言工程实践课后作业:实现思路、代码以及路径记录| 青训营

126 阅读2分钟

实现思路

我们的目标是创建一个GO语言程序,该程序将会实现以下功能:

  1. 从用户输入中读取一个文件夹路径。
  2. 遍历该文件夹及其子文件夹中的所有文件。
  3. 输出文件路径及其对应的文件大小。

为了实现以上功能,我们可以按照以下步骤进行:

1. 用户输入文件夹路径

我们可以使用GO语言的标准库中的bufio来获取用户输入的文件夹路径。这可以通过创建一个新的扫描器(scanner)并读取下一行来实现。

    
package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    scanner := bufio.NewScanner(os.Stdin)

    fmt.Println("请输入文件夹路径:")
    if scanner.Scan() {
        folderPath := scanner.Text()
        fmt.Println("您输入的文件夹路径是:", folderPath)
        // 这里开始遍历文件夹和计算文件大小
    }
}

    

2. 遍历文件夹及其子文件夹中的所有文件

在获取到用户输入的文件夹路径后,我们需要遍历该文件夹及其子文件夹中的所有文件。我们可以使用filepath.Walk函数来实现文件夹的遍历,并利用os.Stat函数获取文件的大小。

package main

import (
    "os"
    "path/filepath"
    "fmt"
)

func main() {
    // ...
    
    err := filepath.Walk(folderPath, func(path string, info os.FileInfo, err error) error {
        if err != nil {
            println(err.Error())
            return err
        }
        
        // 只处理文件
        if !info.IsDir() {
            fmt.Println("文件路径:", path)
            fmt.Println("文件大小:", info.Size(), "字节")
        }
        
        return nil
    })
    
    if err != nil {
        println(err.Error())
        return
    }
}

    

3. 输出文件路径及其对应的文件大小

在遍历文件夹中的每个文件时,我们可以通过调用os.Stat函数获取文件的大小,并打印输出文件路径及其对应的文件大小。

以上是一个基本的实现思路,下面是完整的代码示例:

    
package main

import (
	"bufio"
	"fmt"
	"os"
	"path/filepath"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)

	fmt.Println("请输入文件夹路径:")
	if scanner.Scan() {
		folderPath := scanner.Text()
		fmt.Println("您输入的文件夹路径是:", folderPath)

		err := filepath.Walk(folderPath, func(path string, info os.FileInfo, err error) error {
			if err != nil {
				println(err.Error())
				return err
			}

			// 只处理文件
			if !info.IsDir() {
				fmt.Println("文件路径:", path)
				fmt.Println("文件大小:", info.Size(), "字节")
			}

			return nil
		})

		if err != nil {
			println(err.Error())
			return
		}
	}
}

    

总结

通过上述步骤,我们成功实现了一个GO语言工程实践的课后作业。我们探讨了实现思路、编写代码,并记录了路径的方法。这个程序可以读取用户输入的文件夹路径,遍历该文件夹及其子文件夹中的所有文件,并输出每个文件的路径和文件大小。