简洁的Web开发框架

Kilin · · 907 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

## 地址链接 https://github.com/guanglingao/cynex ## 功能介绍 ##### 这是一个Go语言工具组件,用于开发Web应用;参考SpringMVC建立Controller的方式及编程习惯。 ##### 集成内置配置文件读取、LRU缓存、日志组件;经过高并发长时间段、服务端内存观察、压力等测试,高效、简洁、安全。 ##### 可用于生产环境。 #### 〇、下载与引用 ``` go get -u github.com/GuanglinGao/cynex 或(右上角绿色按钮)打包zip文件,解压至[gopath]/src中 ``` #### 一、快速入门 ##### 1、创建程序启动文件main.go,在main方法中启动HttpServer ``` package main import ( "cynex/react" ) func main() { react.Server.Start() } ``` ##### 2、创建控制器文件controller/user.go;在文件中定义控制器类型User,在init方法中绑定路径处理方法 ``` package controller import ( "cynex/log" "cynex/react" "net/http" ) type User struct { } func init() { react.BindGet("/index", new(User), "Index") } func (u *User) Index(w http.ResponseWriter, r *http.Request) { log.Debug("Index 方法已经执行") } ``` ##### 3、使用默认配置,执行main方法。在浏览器可访问绑定路径的地址。 #### 二、绑定请求路径与处理方法,Controller层API ##### 1、静态路径 ``` react.BindGet("/index", new(User), "Index") // react.BindGet("【此处为浏览器请求路径】", 【此处为响应处理组件指针】, "【此处为处理方法名,将使用此方法处理请求】") ``` ##### 2、正则,正则表达式使用小括号包裹,完全占满子路径一格(必须位于两个斜杠中间,或处于路径末尾) ``` react.BindGet("/index/([0-9])", new(User), "Index") // 匹配 /index/1 等 ``` ##### 3、常用替换,子路径(双斜线中间的路径标识)中,使用中括号包裹,完全占满子路径一格 ``` react.BindGet("/index/[*dex]", new(User), "Index") // 匹配 /index/index,另有如下三种用法 react.BindGet("/index/[*de*]", new(User), "Index") react.BindGet("/index/[inde*]", new(User), "Index") react.BindGet("/index/[*]", new(User), "Index") ``` ##### 4、路径变量,使用大括号包裹,占满子路径一格;大括号中的字段为变量名称 ``` react.BindGet("/index/{name}", new(User), "Index") // 匹配 /index/John 时,在FormValue中添加名称为name值为John的变量 ``` ##### 5、处理器组件与处理器方法 ``` type User struct { } // 处理器组件如上,处理器可任意建立 func (u *User) Index(w http.ResponseWriter, r *http.Request) { log.Debug("Index 方法已经执行") } // 处理器方法,如上;链接至处理器,方法参数必须为 http.ResponseWriter、*http.Request,方法参数数量及前后顺序均不可修改。 ``` ##### 6、其他 ``` react.BindPost("/index/{name}", new(User), "Index") // 绑定POST请求 // GET和POST方法都支持OPTIONS请求返回数据 ``` #### 三、Server配置 ##### 1、导出变量 ``` Config map[string]string // 配置项 DownloadDir string // 文件下载路径 HTTPPort int // HTTP端口 HTTPSPort int // HTTPS端口 HTTPSEnabled bool // 是否启用HTTPS TLSKeyDir string // HTTPS私钥文件 TLSCertDir string // HTTPS证书文件 ``` ##### 2、启动示例 ``` package main import ( _ "cynex-test/controller" "cynex/react" ) func main() { react.Server.Start() } ``` ##### 3、使用.ini 文件作为服务启动配置;默认加载程序运行目录及conf子目录下的所有INI文件 ``` // wd := os.Getwd() // 例如,wd作为工作目录(程序可执行文件所在的文件夹);服务启动将会加载此目录和 wd/conf 中的全部INI文件作为配置 // 默认配置文件,示例如下;对应的参数名称不可修改 [default] download_dir = . log_dir = ./logs log_threshold = info [http] port = 9090 [https] enable = true port = 8080 key_dir = conf/server.key cert_dir = conf/server.crt ``` [INI语法格式参考](./conf/conf.md "INI语法参考") ##### 4、其他参数读取 ``` func (s *server) ConfigValue(name string) string ``` #### 四、静态文件及文件下载路径绑定 ``` react.BindDownload("/download", "2019-04-11.log") // react.BindDownload("【此处为浏览器的请求地址】", "【此处为文件相对与下载目录的路径,下载目录使用配置文件配置】") react.BindStatic("/static", "/") // react.BindStatic("【此处为浏览器的请求路径,该路径下的全部子路径文件为静态文件】", "【此处为服务器中的文件夹路径】") ``` #### 五、前置处理与后置处理 ##### 使用管道方式为处理方法设置前置处理方法与后置处理方法 ``` react.PipelineBefore(new(User), "Index", new(User), "Before") // react.PipelineBefore(【目标组件的指针】, "【目标方法】", 【前置组件的指针】, "【前置方法,此方法将在目标方法前执行】") react.PipelineBefore(new(User), "Before", new(User), "BeforeBefore") react.PipelineAfter(new(User), "Index", new(User), "After") // react.PipelineAfter(【目标组件的指针】, "【目标方法】", 【后置组件的指针】, "【后置方法,此方法将在目标方法后执行】") react.PipelineAfter(new(User), "After", new(User), "AfterAfter") ``` #### 六、其他引用 [1、LRU缓存](./cache/cache.md "其他组件依赖LRU缓存实现") [2、日志](./log/log.md "日志输出") [3、配置文件读取](./conf/conf.md "应用启动配置读取") #### 七、交流群 ![交流群](./Cynex框架实战群二维码.png)

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

907 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传