• 【小海实习日记】golang-iris框架学习笔记


    iris是golang的一个web框架,和gin类似。

    1.main.go

    初始化数据库连接。

    初始化DAO、Service和Controller。

    设置路由并启动Iris应用。

    这个 main.go 文件是一个Go程序的入口点,使用 Iris 框架来构建一个 Web 服务器。以下是这个文件中各个部分的作用和功能:

    1.包导入

    import (

    )

    导入项目内和第三方的包,用于实现不同的功能,如HTTP处理、日志记录、性能分析等。

    2.环境变量设置

    设置环境变量,将时区设置为 "Asia/Shanghai"。

    3.日志初始化

    logger := logutil.GetLogger()defer logger.Sync()

    sugar := logger.Sugar()

    初始化日志记录器,用于记录程序的运行信息和错误。

    4.Iris 应用初始化

    app := iris.New()

    创建一个新的 Iris 应用实例。

    5.错误处理

    app.OnErrorCode(iris.StatusInternalServerError, func(ctx iris.Context) {

    httputil.NewResponse().JSONFailedNoData(ctx, "internal server error", 500)

    })

    app.OnErrorCode(iris.StatusBadRequest, func(ctx iris.Context) {

    httputil.NewResponse().JSONFailedNoData(ctx, "Bad Request", 400)

    })

    定义全局错误处理函数,当发生 500 或 400 错误时,返回相应的 JSON 错误响应。

    6.全局中间件

    app.UseGlobal(func(ctx iris.Context) {

    ctx.Record()

    defer func() {

    if r := recover(); r != nil {

    sugar.Errorf("%v", r)

    ctx.StatusCode(500)

    }

    }()

    ctx.Next()

    })

    使用全局中间件来记录请求和处理 panic 恢复,确保程序在发生异常时不会崩溃。

    7.配置加载

    config.InitConfig()

    config.LoadConfigByDir("config")

    初始化和加载配置文件,从 "config" 目录读取配置信息。

    8.pprof 分析工具

    p := pprof.New()

    app.Any("/debug/pprof", p)

    app.Any("/debug/pprof/{action:path}", p)

    集成 pprof 性能分析工具,用于分析程序的性能瓶颈和内存使用情况。

    9.注册全局中间件

    app.UseGlobal(middleware.GenerateSession)

    使用全局中间件生成会话信息。

    10.路由配置

    route.HomeRoute(app)

    route.AdvertisementRoute(app)

    route.KlineRoute(app)

    route.CoinProfileRoute(app)// 加载指标胜率相关路由

    route.SignalRoute(app)

    route.PersonRoute(app)

    route.MarketRoute(app)

    route.WalletRoute(app)

    route.DataRoute(app)

    route.HalvingRoute(app)

    route.NewsFlashRoute(app)

    route.ArticleRoute(app)

    route.ChatRoute(app)

    route.SearchRoute(app)

    route.TabRoute(app)

    route.AiRoute(app)

    route.CopyTradingRoute(app)

    route.EventRoute(app)

    route.BillboardRoute(app)

    为应用配置各种路由,将不同的 URL 路径映射到相应的处理函数上。

    启动服务器

    err := app.Listen(":8000")if err != nil {

    logger.Error(err.Error())

    }

    启动服务器,监听 8000 端口。如果启动过程中出现错误,记录错误信息。

    总结

    这个 main.go 文件的主要作用是初始化一个 Iris Web 应用,设置必要的全局中间件和错误处理,加载配置文件,注册各种路由,然后启动 Web 服务器。这是一个典型的 Go Web 应用程序入口点,通过清晰的结构和模块化的设计,确保应用能够高效、可靠地运行。

    2.controller:

    接收并处理客户端请求,将请求数据封装为DTO对象。

    调用Service层进行业务处理,并返回响应数据。

    这个控制器主要负责将 HTTP 请求转发给服务层处理,并将服务层返回的结果通过 HTTP 响应返回给客户端。通过控制器的封装,实现了业务逻辑与 HTTP 请求的解耦,提高了代码的可维护性和可测试性。

    HTTP 请求(Hypertext Transfer Protocol request)是指客户端向服务器发送的请求消息,用于请求特定资源或执行特定操作。在 Web 开发中,前端向后端发送的请求就是一种 HTTP 请求。

    HTTP 请求通常包含以下部分:

    请求方法:定义了要对资源执行的操作,如 GET、POST、PUT、DELETE 等。

    请求 URL:指定要访问的资源的地址。

    请求头:包含了关于客户端和请求的更多信息,如 User-Agent、Accept、Content-Type 等。

    请求体:对于 POST、PUT 等需要传递数据的请求方法,请求体包含了要发送的数据。

    前端通过发送不同类型的 HTTP 请求,可以与后端交互,请求数据、提交表单、上传文件等。后端接收到 HTTP 请求后,根据请求的内容执行相应的操作,并返回 HTTP 响应给前端,包含了请求的结果或执行状态等信息。

    3.service:

    处理业务逻辑,调用DAO层进行数据操作。

    返回处理结果给Controller层。

    4.dao:

    使用GORM与数据库交互,执行CRUD操作。

    将数据库查询结果转换为数据模型对象。

    数据库交互内容

    获取数据库连接:从 db 包获取一个名为 "aicoin" 的 MySQL 数据库连接。

    构建查询:

    从 ad_distribute 表中选择广告ID、位置、展示时长以及 ad_info 表中的所有字段。

    添加位置、状态、结束时间和(可选的)开始时间等查询条件。

    按照广告分发的 Rank 字段降序排序。

    进行左连接,将 ad_info 表中的数据加入查询。

    执行查询:执行构建好的查询,将结果存储在一个切片中,并返回给调用者。

    交互示例

    假设 position 为 1,stateField 为 "state":

    查询 ad_distribute 表中位置为 1 且状态为 1(上线)的广告。

    广告的结束时间大于当前时间,并且开始时间小于等于当前时间。

    通过左连接 ad_info 表,获取广告的详细信息。

    最后按广告的 Rank 字段降序排序并返回结果。

    通过这些步骤,函数将从数据库中获取符合条件的广告详情,并以一个切片形式返回。

    5.dto:

    定义请求和响应的数据结构,用于在Controller和Service层之间传递数据。

    6.route:

    配置应用的路由,将请求路径映射到Controller的方法。

    通过这种方式,可以实现清晰的三层架构,代码职责明确,便于维护和扩展。

    BillboardRoute 函数为应用程序设置了与“榜单”相关的路由。通过初始化 DAO、Service 和 Controller 对象,并为路由分组添加具体的路由规则,实现了从请求处理到业务逻辑执行再到数据访问的一整套流程。这种方式实现了代码的分层,清晰地组织了各个模块之间的关系,有助于代码的维护和扩展。

    go mod

    go.mod 文件是Go模块化管理的核心文件。它定义了一个Go模块的元数据,包括模块名、Go版本、依赖项及其版本,以及替换指令。go.mod 文件的主要作用是管理项目的依赖关系,并确保构建的一致性和可重复性。

    以下是 go.mod 文件中的各个部分及其作用:

    模块名称和Go版本

    module aicoin/web-api

    go 1.16

    module aicoin/web-api:定义了当前模块的名称。这个名称通常是模块的路径,可以是本地路径,也可以是远程仓库的路径。

    go 1.16:指定了模块使用的Go版本。

  • 相关阅读:
    2022速卖通宠物用品热销及需求品类推荐!
    AI「鸟口普查」,康奈尔大学利用深度学习分析北美林莺分布
    计算机毕业设计 基于SSM的垃圾分类管理系统(以医疗垃圾为例)的设计与实现 Java实战项目 附源码+文档+视频讲解
    FreeROTS 任务通知和实操 详解
    win10 安装 rabbitMQ详细步骤
    嵌套事务与异常处理
    第三代高级语言
    java高级用法之:无所不能的java,本地方法调用实况
    Centos7 可以启动tomcat但无法访问的问题
    公共关系学试题与参考答案
  • 原文地址:https://blog.csdn.net/weixin_44828537/article/details/139360860