Go fiber 框架快速入门

Fiber是一个受到Express启发的Web框架,建立在Go语言写的最快的FasthttpHTTP引擎的基础上。旨在简化 零内存分配提高性能,以便快速开发。
据说性能秒杀一概go下的web框架,只有fasthttp能略略领先。
这么牛逼的框架上手还特别快,你说气不气人?

package main

import "github.com/gofiber/fiber/v2"

func main() {
    app := fiber.New()

    app.Get("/", func(c *fiber.Ctx) error {
        return c.SendString("Hello, World 👋!")
    })

    app.Listen(":3000")
}

以上都是官网都可以查到的信息,个人感觉这个fiber相较于Gin框架更加的小巧,使用起来没有学习周期,很多用法都Gin框架非常的相似。

下面贴一个学习用的简单的实例:

package main

import (
    "fmt"

    "github.com/gofiber/template/html"

    "github.com/gofiber/fiber/v2"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

var (
    DB *gorm.DB
)

type Todo struct {
    ID     int    `json:"id"`
    Tiltle string `json:"title"`
    Status bool   `json:"status"`
}

func initMysql() (err error) {
//初始化数据库连接
    dns := "root:123456@(localhost:3306)/todo?charset=utf8mb4&parseTime=True&loc=Local"
    DB, err = gorm.Open(mysql.Open(dns), &gorm.Config{})
    if err != nil {
        fmt.Println("mysql content faild, err:", err)
        return
    }
    return
}

func main() {
    err := initMysql()
    if err != nil {
        panic(err)
    }
    DB.AutoMigrate(&Todo{})
    /*
          fiber默认使用html/template加载模板文件,可自定义使用其他模板引擎加载。
          支持amber,handlebars,mustache,pug等等...
        */
    engine := html.New("./templattes", ".html")
    app := fiber.New(fiber.Config{
        Views: engine,
    })
//加载静态文件
    app.Static("/static", "./static")
/*
生成首页
注意新版的fiber中要求匿名函数后必须使用一个error的返回值,
fiber框架下很多的函数都是默认定义了error返回值,
所以我们都可以直接return一个执行函数即可。
*/  
app.Get("/", func(c *fiber.Ctx) error {
//fiber中定义使用了类似Gin框架的gin.H{}做了一个fiber.Map{},返回任意内容
        return c.Render("index", fiber.Map{
                "code":2000,
                "msg":"Todo list sussce!",
            })
    })
    // 注册一个路由组
    v1 := app.Group("/v1")
    // 添加一个todo
    v1.Post("/todo", func(c *fiber.Ctx) error {
        var todo Todo
        c.BodyParser(&todo)
        if err = DB.Create(&todo).Error; err != nil {
            return c.JSON(fiber.Map{
                "code": 2001,
                "msg":  "add a todo message faild",
            })
        } else {
            return c.JSON(todo)
        }

    })
    // 查看todo列表
    v1.Get("/todo", func(c *fiber.Ctx) error {
        var todolist []Todo
        if err = DB.Find(&todolist).Error; err != nil {
            return c.JSON(fiber.Map{
                "code": 2002,
                "msg":  "don't get todo list",
            })
        } else {
            return c.JSON(todolist)
        }

    })
    // 根据id修改todo
    v1.Put("/todo/:id", func(c *fiber.Ctx) error {
        id := c.Params("id")
        var todo Todo
        if err = DB.Where("id=?", id).First(&todo).Error; err != nil {
            return c.JSON(fiber.Map{
                "code": 2003,
                "msg":  "don't search todo message by id ",
            })
        }
        c.BodyParser(&todo)
        if err = DB.Save(&todo).Error; err != nil {
            return c.JSON(fiber.Map{
                "code": 2004,
                "msg":  "don't update todo message by id",
            })
        } else {
            return c.JSON(todo)
        }
    })

    //根据id删除todo
    v1.Delete("/todo/:id", func(c *fiber.Ctx) error {
        id := c.Params("id")
        if err = DB.Where("id=?", id).Delete(Todo{}).Error; err == nil {
            return c.JSON(fiber.Map{
                "code": 2000,
                "msg":  "delete todo massage success ",
            })
        }
        return err
    })
    app.Listen(":3000")
}

Fiber框架支持丰富的中间件和第三方中间,有兴趣的朋友可以去官网查看一下
例子中使用的静态文件来自可爱的Q1mi老师,喜欢的朋友去给Q1mi老师点star

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,063评论 6 510
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,805评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,403评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,110评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,130评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,877评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,533评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,429评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,947评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,078评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,204评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,894评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,546评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,086评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,195评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,519评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,198评论 2 357

推荐阅读更多精彩内容