GO语言工程实践:实现思路、代码以及路径记录

54 阅读1分钟

假设我们要实现一个简单的命令行工具,用于记录文件路径并列出文件内容。

实现思路

  1. 项目结构

    • 创建一个项目目录,包含主文件和可能的子目录。
    • 使用Go模块来管理依赖。
  2. 功能实现

    • 读取命令行参数,获取文件路径。
    • 检查文件是否存在。
    • 读取文件内容并输出。
  3. 路径记录

    • 使用一个简单的数据结构(如切片)来记录所有处理过的文件路径。

代码示例

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.txtfile2.txt 的内容,并输出它们的绝对路径。