在go语言服务中封装路由和示例

本文涉及的产品
应用实时监控服务-用户体验监控,每月100OCU免费额度
云原生网关 MSE Higress,422元/月
性能测试 PTS,5000VUM额度
简介: 【6月更文挑战第23天】本文介绍golang后端按协议处理、中间件(一次性与每次请求执行)划分、以及服务架构Controller、Logic/Service、DAO/Repository和Routers划分。代码仓库在GitHub上提供。使用框架简化了交互和处理。后续章节深入探讨服务构建。

简介

本文介绍服务封装涉及的HTTPServer,处理超时和路由。

本文示例展示了一个简单的服务,包括健康检查(pong)和资源操作。主、欢迎及查询列表接口演示了服务响应。

Toroid托瑞德符号.png

1 中间件划分方法:

协议处理 https的请求交互处理层,可支持多种协议 thrift,gRPC,http/https 中间件开发

中间件有两个类型:

  • 第一部分

    在初始化中间件时执行一次。这就是你设置所有全局对象、逻辑等的地方。每个应用程序生命周期发生一次的所有事情。

  • 第二部分

    对每个请求执行的。例如,您只需将“全局”数据库对象注入上下文中的数据库中间件。一旦它在上下文中,您可以从其他中间件和您的处理程序函数中检索它。

2 服务器中业务处理方式

Controller,

与上述类似,服务入口,负责处理路由,参数校验,请求转发。

Logic/Service,

逻辑(服务)层,一般是业务逻辑的入口,可以认为从这里开始,所有的请求参数一定是合法的。业务逻辑和业务流程也都在这一层中。常见的设计中会将该层称为 Business Rules。

DAO/Repository,

这一层主要负责和数据、存储打交道。将下层存储以更简单的函数、接口形式暴露给 Logic 层来使用。负责数据的持久化工作。

Routers
内置服务路由,用于健康检查的ping 和 内置记录器 Recovery将 recover任何panic,如果有panic 将写入500

    func (that *ServerGroup) Routers() {

        that.Use(gin.Logger())
        that.Use(gin.Recovery())

        that.GET("/", func(c *gin.Context) {
            c.JSON(http.StatusOK, gin.H{
                "message": "pong",
            })
        })

    }

3 服务中使用默认的路由封装和寻址

这些服务通过使用定义良好的API 相互通信。即使是单个业务操作也可能导致 所有服务直接多个点对点调用。一个常见通信模式是使用充当协调器的集中式服务。

它确认所有传入的请求并将操作委托给相应服务。 它还管理整个业务交易的工作流程,每个服务只是完成一个操作,并不了解整个流程。

创建服务 HTTPServer,并处理可能的超时,绑定路由到服务引擎

func NewHttpServer(handler http.Handler) *http.Server {

    return &http.Server{
        Addr:           Ports,
        Handler:        handler,
        ReadTimeout:    500 * time.Second,
        WriteTimeout:   100 * time.Second,
        MaxHeaderBytes: 1000 << 20,
    }
}

启动服务

func Start() {
    var Servers = NewHttpServer(NewRouter())
    log.Fatalf(Servers.ListenAndServe().Error())
}

func main() {
    Start()
}

4 使用该服务

主界面

     http://127.0.0.1:3040/

        message "pong"

欢迎界面

     http://127.0.0.1:3040/resource

        "message": "success", 
        "data": "welcome!", 
        "code": 200,

查询列表

    http://127.0.0.1:3040/resource/list

    {"code":200,
    "data":[
                {"id":"en00029","name":"infinsh war III","path":"video.asdaliyun.com/oss/usubda","times":"180min"},
                {"id":"en00028","name":"infinsh war II","path":"video.asdaliyun.com/oss/usubde","times":"170min"}],
    "message":"success"}

具体信息

     http://127.0.0.1:3040/resource/en00029

    {"code":200,
    "data":
        {"id":"en00029","name":"infinsh war III","path":"video.asdaliyun.com/oss/usubda","times":"180min"},
    "message":"success"}

5 小结

使用框架的方式将帮助我们处理很多事情,比如序列号返回,传入参数绑定,它更有利于CS架构的交互。这将在下一节中得到体现。

我们从下一节正式开始完整的服务旅程。

本节代码地址

         https://github.com/hahamx/examples/blob/main/tcps/2_with_http_handler/http_gin.go
目录
相关文章
|
4天前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
51 20
|
2天前
|
存储 监控 算法
探秘员工泄密行为防线:基于Go语言的布隆过滤器算法解析
在信息爆炸时代,员工泄密行为对企业构成重大威胁。本文聚焦布隆过滤器(Bloom Filter)这一高效数据结构,结合Go语言实现算法,帮助企业识别和预防泄密风险。通过构建正常操作“指纹库”,实时监测员工操作,快速筛查可疑行为。示例代码展示了如何利用布隆过滤器检测异常操作,并提出优化建议,如调整参数、结合日志分析系统等,全方位筑牢企业信息安全防线,守护核心竞争力。
|
10天前
|
Go C语言
Go语言入门:分支结构
本文介绍了Go语言中的条件语句,包括`if...else`、`if...else if`和`switch`结构,并通过多个练习详细解释了它们的用法。`if...else`用于简单的条件判断;`if...else if`处理多条件分支;`switch`则适用于基于不同值的选择逻辑。特别地,文章还介绍了`fallthrough`关键字,用于优化重复代码。通过实例如判断年龄、奇偶数、公交乘车及成绩等级等,帮助读者更好地理解和应用这些结构。
34 14
|
24天前
|
存储 监控 算法
内网监控系统之 Go 语言布隆过滤器算法深度剖析
在数字化时代,内网监控系统对企业和组织的信息安全至关重要。布隆过滤器(Bloom Filter)作为一种高效的数据结构,能够快速判断元素是否存在于集合中,适用于内网监控中的恶意IP和违规域名筛选。本文介绍其原理、优势及Go语言实现,提升系统性能与响应速度,保障信息安全。
28 5
|
9天前
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
19 0
|
Go 数据格式 JSON
Go语言封装Http协议GET和POST请求
本文几乎没有文字叙述:   /* 有关Http协议GET和POST请求的封装 */ package net import ( "net/http" "io" "bytes" "encoding/json" "io/ioutil" ...
4037 0
|
2月前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
95 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
2月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
48 7
|
2月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
2月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
124 71