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版本。