【小海实习日记】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版本。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值