当前位置: 首页 > 软件库 > Web应用开发 > Web框架 >

Faygo

Go Web API 利器
授权协议 Apache
开发语言 Google Go
所属分类 Web应用开发、 Web框架
软件类型 开源软件
地区 国产
投 递 者 松铭
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Faygo

概述

Faygo 使用全新架构,是最合适开发API接口的Go Web框架。用户只需定义一个struct Handler,就能自动绑定、验证请求参数并生成在线API文档。

最新版本

版本号

v1.0

安装要求

Go Version ≥1.8

快速使用

  • 方式一 源码下载

go get -u -v github.com/henrylee2cn/faygo
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接口(funcstruct类型),共同构成路由操作链,只是概念层面的说法不同

  • 支持多种网络类型:

网络类型 配置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进行配置来避免不必要的重新编译,并且这些配置文件支持自动补填默认值

  • 提供 gormxormsqlxdirectSQLWebsocketini 、http client 等很多常用扩展包

faygo struct handler 多重用途合一

简单示例

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类型的自然顺序, 例如:整数从小到大,字符串是按字典