|
|
||
|---|---|---|
| doc | ||
| example | ||
| interceptor | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
| go.mod | ||
| go.sum | ||
| gosh.go | ||
| helper.go | ||
| require.md | ||
README.md
Gosh
Gosh 是一个轻量级的 HTTP 服务器类库,允许用户通过注册 Anko 脚本和 Go 函数来快速构建 RESTful API。
特性
- 简单易用的 HTTP 路由注册
- 支持 GET、POST、PUT、DELETE、PATCH 等 HTTP 方法
- 通过 Anko 脚本语言实现动态 API 处理
- 内置请求和响应辅助工具
- 支持文件系统、网络、进程和 Shell 命令操作
- 跨平台支持(Linux、Windows)
安装
go get git.kingecg.top/kingecg/gosh
快速开始
创建一个简单的 HTTP 服务器:
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 参考
服务器创建
// 创建新的服务器实例
serverMux := gosh.NewSHMux()
路由注册
// 注册 HTTP 方法路由
serverMux.GET(pattern, script)
serverMux.POST(pattern, script)
serverMux.PUT(pattern, script)
serverMux.DELETE(pattern, script)
serverMux.PATCH(pattern, script)
函数注册
// 注册 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 请求
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)
`)
使用文件系统模块
serverMux.GET("/api/file", `
fs = Require("fs")
content = fs.ReadFile("/path/to/file.txt", "utf8")
Res.WriteStr(content)
`)
使用进程模块
serverMux.GET("/api/env", `
process = Require("process")
env = process.GetAllEnv()
Res.WriteJSON(env)
`)
使用 Shell 模块
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 文件。