Go: 微服务框架 Fiber 简介与实践

这篇具有很好参考价值的文章主要介绍了Go: 微服务框架 Fiber 简介与实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


简介

1. 微服务

微服务或微服务架构是一种体系结构风格,可以将应用程序构建成一个服务的集合:

  • Maintainable 可维修
  • Testable 可测试的
  • Loosely coupled 松散耦合的
  • Independently deployable 可独立部署
  • Owned by a small team 由一个小团队拥有

微服务体系结构是一种应用程序架构,其中应用程序被开发为服务集合。它提供了独立开发,部署和维护微服务架构图和服务的框架。
Go: 微服务框架 Fiber 简介与实践

上图显示了微服务体系结构的样子。请注意,所有微服务都通过与客户端通信的 API 网关连接。

微服务体系结构有助于加快开发过程,而且由于每个服务都是次要的,因此可以由小团队来构建服务。使用微服务也更容易维护和测试代码。因为所有服务都是独立的,所以它还提供了改进的故障隔离,因此,如果一个服务失败,整个系统不一定停止工作。

2. Fiber?

是一个深受 Express 启发的网络框架。如果你使用的是 Node.js、 Python 或者 Ruby,你会发现使用 Fiber 非常容易。Go 速度快,占用的内存少,而且性能高,这意味着它也使得 Fiber 框架更快。Fiber提供了一种健壮的路由机制,中间件内置于大多数任务中,并简化了静态资产的服务或连接到数据库的过程。Fiber有完整的文档,支持,和一个伟大的社区。尽管 Fiber 的主要用例是构建一个一体化的 web 框架,但是也可以使用它创建微服务。

Fiber集成及使用

1.安装fiber

go get -u github.com/gofiber/fiber/v2

2. 简单使用

package main

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

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

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

    // Start server on port 3000
    app.Listen(":3000")
}

访问地址:localhost:3000
Go: 微服务框架 Fiber 简介与实践

3.简单实例

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")
}

小结

本文介绍了微服务体系结构的基础知识,并学习了如何在 Go using Fiber 中构建微服务。Fiber 速度很快,类似于 Node.js express 框架,使得 Node.js 开发者更容易转换到使用 Go。本文中讨论的完整代码可以在这个代码中找到。

Fiber构建参考地址: https://dev.to/logrocket/building-microservices-in-go-with-fiber-4f48文章来源地址https://www.toymoban.com/news/detail-408192.html

到了这里,关于Go: 微服务框架 Fiber 简介与实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手写react--fiber架构如何中断和恢复

    React 17 版本开始提供了一个新的JSX转换方案。在之前,JSX 代码会被默认编译成  React.createElement(...)  ,而使用新 JSX 方案后,会从一个独立的模块 react/jsx-runtime 中引入 JSX 函数。 babel插件@babel/plugin-transform-react-jsx /** @jsxRuntime classic */  babel运行时转换 render 创建最初始的fiber对

    2024年02月16日
    浏览(52)
  • IDEA项目实践——Spring框架简介,以及IOC注解

    IDEA创建项目的操作步骤以及在虚拟机里面创建Scala的项目简单介绍 IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介 IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——动态SQL、关系映射、注解开发 文章目录 第1章 Spring 概述

    2024年02月14日
    浏览(48)
  • Go开源世界主流成熟ORM框架gorm实践分享

    @ 目录 概述 定义 核心功能 声明模型与约定 gorm.Model 字段级权限 时间惯例 嵌入结构 字段标签 使用 安装 数据库链接 连接池 CRUD 接口 创建 查询 高级查询 修改 删除 原始SQL 事务 转换 分片 序列化 GORM 官网地址 https://gorm.io/ 最新版本v1.25.1 GORM 官网文档地址 https://gorm.io/docs/ G

    2024年02月05日
    浏览(46)
  • 【Go学习】Ginkgo测试框架学习实践 + 问题记录 + 怎么解决(0)

    1、ginkgo测试框架介绍:https://onsi.github.io/ginkgo/ 2、重点是学习实践 + 问题记录 + 怎么解决 3、送福利:国内好用的ChatGpt有很多,比如:天工、文心一言、讯飞星火、通义万相等 1. 安装 2. 使用 (1)安装正确的话,在当前目录的平行目录下应该会有一个新增的bin目录,目录下有

    2024年01月24日
    浏览(37)
  • GO微服务简介及特性介绍

    互联网技术发展迅速的今天,微服务倍受关注:文章、博客、社交媒体讨论和会议演讲都在谈论。与此同时,也有持怀疑态度的软件社区人员认为微服务没什么新鲜可言。反对者声称它的思想只是面向服务架构的重塑。然而,无论是炒作还是怀疑,不可否认,微服务架构模式

    2024年02月12日
    浏览(43)
  • 【微服务框架】微服务简介

    个人名片: 🐼 作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️ 个人主页🥇: 落798. 🐼 个人WeChat:hmmwx53 🕊️ 系列专栏:🖼️ 零基础学Java——小白入门必备🔥 重识C语言——复习回顾🔥 计算机网络体系———深度详讲 HCIP数通工程师-刷题与实战🔥🔥🔥 微信小程

    2024年04月14日
    浏览(37)
  • go入门实践二-tcp服务端

    上一篇,我们通过go语言的hello-world入门,搭建了go的编程环境,并对go语法有了简单的了解。本文实现一个go的tcp服务端。借用这个示例,展示接口、协程、bufio的使用,与简单的go项目管理; 本文代码见:laboratory/14-go-tcp 首先,我们需要了解go中接口的语法。首先阅读欢迎使

    2024年02月14日
    浏览(34)
  • go入门实践五-实现一个https服务

    在公网中,我想加密传输的数据。(1)很自然,我想到了把数据放到http的请求中,然后通过tls确保数据安全。(2)更进一步,只要数据可以解析,则无需http协议,直接通过tls协议加密传输即可。本文分别尝试了这两个方案。 尝试实现方案之前,我们考虑需要实现哪些内容。(1)如

    2024年02月12日
    浏览(35)
  • Go-Ldap-Admin | openLDAP 同步钉钉、企业微信、飞书组织架构实践和部分小坑

    目录 一、Docker-compose快速拉起demo测试环境 二、原生部署流程 安装MySQL:5.7数据库 安装openLDAP 修改域名,新增con.ldif 创建一个组织 安装OpenResty 下载后端 下载前端 部署后端 部署前端 三、管理动态字段 钉钉 企业微信 飞书 四、部分报错 Go-Ldap-Admin官网:Go-Ldap-Admin 本文用于记

    2024年02月07日
    浏览(47)
  • WebView交互架构项目实战(四):WebView与Native的通信框架手写实践

    其中wholeJS就是JS文件转化而来的字符串,然后调用 webView.loadUrl(\\\"javascript: \\\" + wholeJS); 1 就可以看到和之前一样的效果。 方式2: 通过evaluateJavascript方法 相较于loadUrl,evaluateJavascript的优势在于异步加载,还可以将执行JS代码的结果带回来,我们以下面一个小例子来说明。 我们在

    2024年04月29日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包