# go-command **Repository Path**: da9527/go-command ## Basic Information - **Project Name**: go-command - **Description**: 一个用来练习go语法的命令行项目 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-06 - **Last Updated**: 2025-12-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 命令行工具 (Command Line Tool) 一个功能丰富的Go语言命令行工具,提供交互式命令行环境,支持文件操作、HTTP客户端、数学表达式求值等特性。 ## 📋 目录 - [功能特性](#功能特性) - [项目结构](#项目结构) - [安装要求](#安装要求) - [快速开始](#快速开始) - [命令列表](#命令列表) - [配置文件](#配置文件) - [开发说明](#开发说明) ## ✨ 功能特性 ### 核心功能 - 🎯 **交互式命令行环境** - 提供完整的命令行交互体验 - 📝 **命令自动补全** - 支持Tab键自动补全命令和参数 - 🔍 **历史记录搜索** - 支持Ctrl+R搜索历史命令 - ⚙️ **可配置提示符** - 支持自定义命令提示符格式 - 🎨 **颜色输出支持** - 美观的颜色输出和格式化 ### 文件操作 - 📁 **ls** - 列出目录内容,支持详细模式、递归显示、颜色输出 - 📂 **cd** - 切换工作目录,支持相对路径和绝对路径 - 📄 **cp** - 复制文件和目录 - 📁 **mv** - 移动和重命名文件和目录 ### 网络功能 - 🌐 **http** - 功能完整的HTTP客户端,支持多种HTTP方法 - 🏓 **ping** - 网络连通性测试 ### 工具命令 - 🧮 **数学表达式求值** - 直接在命令行计算数学表达式 - 📚 **help** - 智能帮助系统,支持命令搜索和分组显示 - 📈 **history** - 历史命令管理 - 🌍 **env** - 环境变量管理 - 🖥️ **clear** - 清屏操作 - 📍 **pwd** - 显示当前工作目录 ## 📁 项目结构 ``` ├── main.go # 主程序入口 ├── go.mod # Go模块定义 ├── commands/ # 命令实现 │ ├── ls.go # 目录列表命令 │ ├── cd.go # 目录切换命令 │ ├── cp.go # 文件复制命令 │ ├── mv.go # 文件移动命令 │ ├── http.go # HTTP客户端命令 │ ├── ping.go # 网络测试命令 │ ├── help.go # 帮助命令 │ ├── history.go # 历史记录命令 │ ├── env.go # 环境变量命令 │ ├── echo.go # 回显命令 │ ├── clear.go # 清屏命令 │ ├── pwd.go # 显示当前目录命令 │ └── http/ # HTTP客户端相关 │ ├── client.go # HTTP客户端实现 │ ├── config.go # HTTP配置 │ └── error.go # 错误处理 ├── registry/ # 命令注册系统 │ └── registry.go # 命令注册和管理 ├── config/ # 配置管理 │ └── config.go # 配置文件处理 ├── evaluator/ # 表达式求值器 │ └── evaluator.go # 数学表达式解析和求值 ├── completer/ # 命令补全 │ ├── completer.go # 补全逻辑 │ └── history.go # 历史记录管理 └── utils/ # 工具函数 ├── color.go # 颜色输出 └── error.go # 错误处理 ``` ## 🔧 安装要求 - Go 1.25.5 或更高版本 - 支持的操作系统:Windows、Linux、macOS ## 🚀 快速开始 ### 构建项目 ```bash # 克隆或下载项目到本地 git clone https://gitee.com/da9527/go-command.git # 构建项目 go build -o cmdtool main.go # 运行程序 ./cmdtool ``` ### 使用方法 启动程序后,你将看到一个交互式命令行界面: ``` 欢迎使用命令行工具 输入 'help' 查看可用命令,输入 'exit' 退出。 使用Tab键自动补全命令,使用Ctrl+R搜索历史命令。 >_ ``` ### 基本使用示例 ```bash # 查看帮助 help # 列出当前目录 ls # 切换目录 cd /path/to/directory # 发送HTTP请求 http get https://api.github.com/users/octocat # 计算数学表达式 2 + 3 * 4 sqrt(16) # 使用历史命令 !! # 重复执行上一条命令 !5 # 执行编号为5的历史命令 !cd # 执行最近以cd开头的命令 ``` ## 📚 命令列表 ### 文件操作命令 | 命令 | 描述 | 示例 | |------|------|------| | `ls` | 列出目录内容 | `ls -la /home/user` | | `cd` | 切换工作目录 | `cd Documents` | | `cp` | 复制文件或目录 | `cp file.txt backup.txt` | | `mv` | 移动或重命名文件 | `mv old.txt new.txt` | ### 网络命令 | 命令 | 描述 | 示例 | |------|------|------| | `http` | HTTP客户端 | `http get https://example.com` | | `ping` | 网络连通性测试 | `ping google.com` | ### 工具命令 | 命令 | 描述 | 示例 | |------|------|------| | `help` | 显示帮助信息 | `help ls` | | `history` | 查看历史记录 | `history` | | `env` | 环境变量操作 | `env` | | `echo` | 回显文本 | `echo "Hello World"` | | `clear` | 清屏 | `clear` | | `pwd` | 显示当前目录 | `pwd` | ### 表达式求值 直接在命令行输入数学表达式: ```bash > 2 + 3 * 4 14 > sqrt(16) + sin(pi/2) 5 > log(100) / log(10) 2 ``` 支持的数学函数: - 基础运算:`+`, `-`, `*`, `/`, `%` - 三角函数:`sin`, `cos`, `tan`, `asin`, `acos`, `atan` - 数学函数:`log`, `log10`, `log2`, `exp`, `sqrt`, `abs`, `floor`, `ceil`, `round` - 常量:`pi`, `e` ## ⚙️ 配置文件 程序支持配置文件自定义设置。配置文件位置: - Windows: `%APPDATA%\cmdtool\config.json` - Linux/macOS: `~/.config/cmdtool/config.json` ### 配置选项 ```json { "color": { "enable": true, "theme": "dark" }, "prompt": { "format": ">_ ", "show_path": false, "show_time": false, "show_user": false }, "history": { "enable": true, "max_size": 1000, "save_to_file": true }, "completion": { "enable": true, "sort_by_usage": true, "show_descriptions": true } } ``` ### 自定义提示符 提示符支持变量替换: - `${path}` - 当前路径 - `${pwd}` - 当前工作目录 - `${time}` - 当前时间 (HH:MM:SS) - `${date}` - 当前日期 (YYYY-MM-DD) - `${datetime}` - 完整日期时间 - `${user}` - 用户名 示例: ```json { "prompt": { "format": "[${user}@${path}]${time}$ " } } ``` ## 💻 开发说明 ### 添加新命令 1. 在 `commands/` 目录下创建新的命令文件 2. 实现 `registry.Command` 接口: ```go type YourCommand struct{} func (c *YourCommand) Name() string { return "yourcmd" } func (c *YourCommand) Usage() string { return "yourcmd - 描述信息" } func (c *YourCommand) Execute(args []string) { // 实现命令逻辑 } ``` 3. 在文件末尾注册命令: ```go func init() { registry.Register(&YourCommand{}) } ``` ### 项目架构 - **Registry模式**: 所有命令通过注册表统一管理 - **接口驱动**: 使用接口定义命令规范,便于扩展 - **配置分离**: 配置与逻辑分离,支持运行时配置 - **模块化设计**: 功能模块清晰分离,易于维护 ### 依赖管理 项目使用Go Modules管理依赖,主要依赖: - `golang.org/x/net` - 网络功能 - `github.com/peterh/liner` - 行编辑和补全 - `github.com/mattn/go-runewidth` - 文本宽度计算 ## 🤝 贡献 欢迎提交Issue和Pull Request来改进这个项目。 ## 📄 许可证 本项目采用MIT许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 ## 🆘 支持 如果你遇到问题或有疑问,请: 1. 查看帮助信息:`help` 2. 检查配置文件设置 3. 提交Issue描述问题