Faygo 使用全新架构,是最合适开发API接口的Go Web框架。用户只需定义一个struct Handler,就能自动绑定、验证请求参数并生成在线API文档。
v1.0
Go Version ≥1.8
方式一 源码下载
go get -u -v github.com/henrylee2cn/faygo
方式二 部署工具 (Go to fay)
go get -u -v github.com/henrylee2cn/fay
fay command [arguments] The commands are: new 创建、编译和运行(监控文件变化)一个新的faygo项目 run 编译和运行(监控文件变化)任意一个已存在的golang项目 fay new appname [apptpl] appname 指定新faygo项目的创建目录 apptpl 指定一个faygo项目模板(可选) fay run [appname] appname 指定待运行的golang项目路径(可选)
一个 struct Handler
搞定多件事:
定义 Handler/Middleware
绑定与验证请求参数
生成 Swagger2.0 API 在线文档
数据库 ORM 映射
Handler与Middleware完全相同,都是实现Handler接口(func
或struct
类型),共同构成路由操作链,只是概念层面的说法不同
支持多种网络类型:
网络类型 | 配置net_types 值 |
---|---|
HTTP | http |
HTTPS/HTTP2(TLS) | https |
HTTPS/HTTP2(Let's Encrypt TLS) | letsencrypt |
HTTPS/HTTP2(Let's Encrypt TLS on UNIX socket) | unix_letsencrypt |
HTTP(UNIX socket) | unix_http |
HTTPS/HTTP2(TLS on UNIX socket) | unix_https |
支持单服务单监听、单服务多监听、多服务多监听等,多个服务的配置信息相互独立
基于 httprouter
开发高性能路由,支持链式与树形两种注册风格,支持灵活的静态文件路由(如DirFS、RenderFS、MarkdownFS等)
支持平滑关闭、平滑升级,提供fay工具进行新建项目、热编译、元编程
采用最强大的 pongo2
作为HTML渲染引擎
提供近似LRU的文件缓存功能,主要用途是静态文件缓存
跨平台的彩色日志系统,且同时支持console和file两种输出形式(可以同时使用)
提供Session管理功能
支持Gzip全局配置
提供XSRF跨站请求伪造安全过滤
大多数功能尽量使用简洁的ini进行配置来避免不必要的重新编译,并且这些配置文件支持自动补填默认值
提供 gorm
、xorm
、sqlx
、directSQL
、Websocket
、ini
、http client
等很多常用扩展包
简单示例
package main import ( // "mime/multipart" "time" "github.com/henrylee2cn/faygo" ) type Index struct { Id int `param:""` Title string `param:""` Paragraph []string `param:""` Cookie string `param:""` // Picture *multipart.FileHeader `param:""` } func (i *Index) Serve(ctx *faygo.Context) error { if ctx.CookieParam("faygoID") == "" { ctx.SetCookie("faygoID", time.Now().String()) } return ctx.JSON(200, i) } func main() { app := faygo.New("myapp", "0.1") // Register the route in a chain style app.GET("/index/:id", new(Index)) // Register the route in a tree style // app.Route( // app.NewGET("/index/:id", new(Index)), // ) // Start the service faygo.Run() } /* http GET: http://localhost:8080/index/1?title=test&p=abc&p=xyz response: { "Id": 1, "Title": "test", "Paragraph": [ "abc", "xyz" ], "Cookie": "2016-11-13 01:14:40.9038005 +0800 CST" } */
最近在研究golang的一个框架faygo,功能挺强大。号称是最适合做api开发的框架,由于没有正式系统的使用过该框架,所以不发表个人看法。博主用过golang的gin框架,性能还是挺高的 faygo模板是使用的pongo2的模板引擎,其语法与 Django 模板类似,并且完全兼容 Django 模板。由于pongo2的一些文档比较少,所以博主在faygo的模板使用这一块踩了不少坑, 大部分时间花
假设我们的数据结构是下面这样的 type Goods struct { Id int64 `json:"id"` GoodsId int64 `json:"goods_id"` GoodsName string `json:"goods_name"` Price int64 `json:"price"`
软件专利现在是自由软件运动中的一个避雷针问题,因为他们设置了自由软件无法防御的真正威胁。版权和商标问题一直可以绕开。如果你的部分代码看起来侵害了某人的版权,你只需要重写该部分。如果某人拥有你的项目名称的商标,最坏也就是将项目改名。尽管改名是一种暂时的不便,但长期来讲问题不大,因为代码依然发挥着应有的作用。 但是专利则是针对实现特定思想的完全禁令。无论谁编写的代码,无论使用了什么编程语言。一旦某人指
我的目标是创建一个程序,向用户询问金额,询问每年、每月或每天的利率,询问如何复合,然后询问月、日或年的期限。 然后它会打印未来的价值以及获得的总利息。这是我到目前为止所拥有的,数字是不正确的。如果有人能帮助修改它并使其工作,我会非常感激。
我将一个随机森林模型与R中测试点的表格数据相匹配,现在希望使用与模型中相同预测值(例如坡度、海拔、pH)对应的光栅数据生成一个光栅,显示预测概率值。 RF模型用于使用不同的环境和地球物理数据预测0/1二元变量SITE\u NONSITE。 dcc。s、 假人包括以下数据: 然后,我在整个研究区域内获取与这些相同预测值对应的光栅,并将它们组合成光栅堆栈: 但是,尝试在光栅::predict()中使用
伽利略是一款计算机主板,尺寸略大于银行卡,没有外壳。配置英特尔于今年IDF发布、面向可穿戴设备和小型电子产品的低功 耗Quark X100处理器,这一源自爱尔兰设计的32位Quark处理器基于X86奔腾指令集架构,时钟频率为400MHz,配置512KB缓存。此外,伽利略配置 256MB内存,也支持多种计算行业标准I/O接口,包括ACPI、PCI Express、10/100Mb以太网、SD、USB
GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。对于一名Linux下工作的c++程序员,gdb是必不可少的工具; 1.1. 启动gdb 对C/C++程序的调试,需要在编译前就加上-g选项: - g++ -g hello.cpp -o hello 调试可执行文件: - gdb <program> program也就是你的执行文件,一般在当前
接口管理的逻辑较为复杂,操作频率高,层层审批将严重拖慢生产效率,因此传统的金字塔管理模式并不适用。 YApi 将扁平化管理模式的思想引入到产品的权限管理中,超级管理员 拥有最高的权限,并将权限分配给若干 组长,超级管理员 只需管理组长 即可,实际上管理YAPI各大分组与项目的是“组长”。组长对分组或项目负责,一般由BU负责人/项目负责人担任。 认识组长 组长分为 分组组长 与 项目组长,他们的关系
蜂窝利用 目前,我们已经知道了如何在头单元上运行代码,前提是你能用USB设备(劫持)来连接汽车或访问车内的Wi-Fi(利用D-BUS漏洞/功能)。最大的问题是,这些入侵方法都要么需要接触到汽车,要么就需要攻击者加入到车上的Wi-Fi热点。 如果能加入到车内的Wi-Fi热点并进行漏洞利用是非常让人激动的,因为这就说明我们已经远程入侵了一辆原装汽车,但是,对我们来说,这其中的前提和限制还是太多了。首先
Ordering是Guava类库提供的一个犀利强大的比较器工具,Guava的Ordering和JDK Comparator相比功能更强。它非常容易扩展,可以轻松构造复杂的comparator,然后用在容器的比较、排序等操作中。 常用静态方法 Ordering.natural(); // 使用Comparable类型的自然顺序, 例如:整数从小到大,字符串是按字典