# Gosh Gosh 是一个轻量级的 HTTP 服务器类库,允许用户通过注册 [Anko](https://github.com/mattn/anko) 脚本和 Go 函数来快速构建 RESTful API。 ## 特性 - 简单易用的 HTTP 路由注册 - 支持 GET、POST、PUT、DELETE、PATCH 等 HTTP 方法 - 通过 Anko 脚本语言实现动态 API 处理 - 内置请求和响应辅助工具 - 支持文件系统、网络、进程和 Shell 命令操作 - 跨平台支持(Linux、Windows) ## 安装 ```bash go get git.kingecg.top/kingecg/gosh ``` ## 快速开始 创建一个简单的 HTTP 服务器: ```go package main import ( "fmt" "net/http" "git.kingecg.top/kingecg/gosh" ) func main() { // 创建服务器实例 serverMux := gosh.NewSHMux() // 注册 Go 函数,可在脚本中调用 serverMux.RegistFunction("hello", func(name string) string { return fmt.Sprintf("Hello, %s", name) }) // 注册 GET 路由,使用 Anko 脚本处理请求 serverMux.GET("/hello", ` name = Req.GetQuery("name") Res.WriteStr(hello(name)) `) // 启动服务器 http.ListenAndServe(":8089", serverMux) } ``` ## API 参考 ### 服务器创建 ```go // 创建新的服务器实例 serverMux := gosh.NewSHMux() ``` ### 路由注册 ```go // 注册 HTTP 方法路由 serverMux.GET(pattern, script) serverMux.POST(pattern, script) serverMux.PUT(pattern, script) serverMux.DELETE(pattern, script) serverMux.PATCH(pattern, script) ``` ### 函数注册 ```go // 注册 Go 函数,可在脚本中调用 serverMux.RegistFunction(name, function) ``` ### 请求处理 在 Anko 脚本中,可以使用以下对象和方法: - `Req` - 请求对象 - `Req.GetQuery(key)` - 获取查询参数 - `Req.GetBodyStr()` - 获取请求体字符串 - `Req.GetHeader(key)` - 获取请求头 - `Req.GetBody()` - 获取解析后的请求体(JSON 或表单) - `Res` - 响应对象 - `Res.SetHeader(key, value)` - 设置响应头 - `Res.WriteStr(str)` - 写入字符串响应 - `Res.WriteJSON(value)` - 写入 JSON 响应 - `Res.Status(code)` - 设置状态码 - `Res.StatusOk()` - 设置 200 状态码 - `Res.StatusBadRequest()` - 设置 400 状态码 - `Res.StatusNotFound()` - 设置 404 状态码 - `Res.StatusInternalServerError()` - 设置 500 状态码 - `Res.StatusForbidden()` - 设置 403 状态码 ### 内置模块 在 Anko 脚本中,可以使用 `Require` 函数导入以下模块: - `fs` - 文件系统模块 - 提供文件读写操作 - `net` - 网络模块 - 提供网络相关操作,如端口检测 - `process` - 进程模块 - 提供进程信息和环境变量访问 - 获取和设置环境变量 - 获取进程 ID 和主机名等信息 - `shell` - Shell 命令模块 - 提供执行 Shell 命令的功能 - 支持 Linux bash、Windows cmd 和 PowerShell - 命令输出解析功能 ## 示例 ### 处理 JSON 请求 ```go serverMux.POST("/api/user", ` body = Req.GetBody() name = body["name"] age = body["age"] response = { "message": "User created", "user": { "name": name, "age": age } } Res.WriteJSON(response) `) ``` ### 使用文件系统模块 ```go serverMux.GET("/api/file", ` fs = Require("fs") content = fs.ReadFile("/path/to/file.txt", "utf8") Res.WriteStr(content) `) ``` ### 使用进程模块 ```go serverMux.GET("/api/env", ` process = Require("process") env = process.GetAllEnv() Res.WriteJSON(env) `) ``` ### 使用 Shell 模块 ```go serverMux.GET("/api/ls", ` shell = Require("shell") result, err = shell.Exec("ls -la") if err == nil { Res.WriteStr(result.Stdout) } else { Res.StatusInternalServerError() Res.WriteStr("Error executing command") } `) ``` ## 贡献 欢迎提交问题和拉取请求! ## 许可证 本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件。