假设我们要实现一个简单的命令行工具,用于记录文件路径并列出文件内容。
实现思路
-
项目结构:
- 创建一个项目目录,包含主文件和可能的子目录。
- 使用Go模块来管理依赖。
-
功能实现:
- 读取命令行参数,获取文件路径。
- 检查文件是否存在。
- 读取文件内容并输出。
-
路径记录:
- 使用一个简单的数据结构(如切片)来记录所有处理过的文件路径。
代码示例
package main
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
)
func main() {
// 检查命令行参数
if len(os.Args) < 2 {
fmt.Println("Usage: go run main.go <file1> <file2> ...")
return
}
// 记录所有处理过的文件路径
var paths []string
// 遍历所有命令行参数
for _, arg := range os.Args[1:] {
// 获取绝对路径
absPath, err := filepath.Abs(arg)
if err != nil {
fmt.Printf("Error getting absolute path for %s: %v\n", arg, err)
continue
}
// 检查文件是否存在
if _, err := os.Stat(absPath); os.IsNotExist(err) {
fmt.Printf("File %s does not exist\n", absPath)
continue
}
// 读取文件内容
content, err := ioutil.ReadFile(absPath)
if err != nil {
fmt.Printf("Error reading file %s: %v\n", absPath, err)
continue
}
// 输出文件内容
fmt.Printf("Content of %s:\n%s\n", absPath, string(content))
// 记录路径
paths = append(paths, absPath)
}
// 输出所有处理过的文件路径
fmt.Println("\nProcessed paths:")
for _, path := range paths {
fmt.Println(path)
}
}
路径记录
在代码中,我们使用了一个切片 paths 来记录所有处理过的文件路径。每次成功处理一个文件后,我们将文件的绝对路径添加到 paths 切片中。最后,我们输出所有处理过的文件路径。
运行示例
假设你将上述代码保存为 main.go,你可以通过以下命令运行:
go run main.go file1.txt file2.txt
这将读取 file1.txt 和 file2.txt 的内容,并输出它们的绝对路径。