使用gin框架实现简单blog项目。

 

环境配置不讲了。

 

初始化项目目录

项目名称为ginBlog,生成目录结构如下:

目录讲解:

  • conf 用于存储配置文件
  • middleware 应用中间件
  • models 应用数据库模型
  • pkg 第三方包
  • routers 路由逻辑处理
  • runtime 应用运行时数据

go.mod 文件是go mod init命令生成的,这个自己去学习为什么这么做。

 

初始化项目数据库

新建ginBlog数据库,编码默认utf8mb4_general_ci。

新建表如下:

1. 标签表

2. 文章表

3. 认证表

4. 最后初始化一个用户

到这里数据库就算初始化成功了。

 

准备项目配置包

这里我们使用 go-ini ,GitHub地址:https://github.com/go-ini/ini

使用go get命令获取依赖包:

 

然后我们在conf目录下新建 app.ini 文件,写入内容:

 

接下来我们在pkg目录下新建setting目录,新建 setting.go 文件。建立调用配置的setting模块。

这样我们就算将配置文件的内容读取到了程序中。

因为go lint强制要求驼峰命名法,要求导出的信息有注释…

 

编写API错误码包

建立错误码err模块,在pkg目录下新建err目录。

新建code.go文件,它负责定义错误码,内容如下:

 

新建msg.go文件,它负责将错误码转为错误信息,内容如下:

 

 

编写工具包

先拉取com依赖包,命令如下:

go get -u github.com/unknwon/com

 

编写分页页码获取方法

在pkg目录下新建util目录,新建pagination.go文件,文件内容如下:

 

 

编写Models

gorm是一个go的ORM库。

项目地址:https://github.com/go-gorm/gorm 。

教程地址:https://gorm.io/zh_CN/

GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server。

具体的我们不展开讲,拉取依赖包代码如下:

go get -u gorm.io/gorm

go get -u gorm.io/driver/mysql

 

在ginBlog的models目录下新建models.go文件,它主要用于models的初始化使用,代码如下:

在从gorm版本v2和之前的v1代码有些不一致,没有找到Close方法,Github上给出的解决方案如下:

https://github.com/go-gorm/gorm/issues/3145

一般来说是不需要Close的,但是如果需要,也可以调用。

 

 

编写项目启动、路由文件

在src下建立main.go作为启动文件,写入文件内容:

 

然后接下来我们尝试执行一下 go run main.go命令。

 

然后我们可以访问 192.168.1.101:8000/test,检查返回是否为 {“message”:”test”}。

当我访问之后,就可以看到新增的一行:

 

知识点

Gin

gin.Default()

返回gin的Engine结构体,我们看看函数具体实现:

Engine里面包含一个RouterGroup,相当于创建一个路由Handlers,可以后期绑定各类路由规则、函数、中间件等。

 

router.GET

创建不同的HTTP方法绑定到Handlers中,也支持POST、PUT、DELETE、PATCH、OPTIONS、HEAD等常用的Restful方法。

 

gin.Context

Context是gin中的上下文,它允许我们再中间件之间传递变量、管理流、验证Json请求、响应Json请求等。

在gin中包含大量的Context方法,比如我们常用的DefaultQuery、Query、DefaultPostFrom、PostFrom等。

 

gin.H

它的实现是一个 map[string]interface{}

 

net/http

http.Server

一个结构体,保存一系列的参数变量。

  • Addr:监听TCP地址,格式为:port
  • Handler:http句柄,实质为ServerHTTP,用于处理程序响应HTTP请求。
  • ReadTimeout:读取超时时间
  • WriteTimeOut:写入超时时间
  • MaxHeaderBytes:请求头的最大字节数

另外还有一些其他参数:

  • TLSConfig: 安全传输层协议TLS的配置
  • ReadHeaderTimeOut:读取请求头的超时时间
  • IdleTimeOut:等待超时时间
  • ConnState:指定可选回调函数,客户端连接发生变化时调用
  • ErrorLog:指定可选日志记录器,用于接收程序意外行为和底层系统错误。默认控制台输出。

 

ListenAndServe()

监听TCP网络地址,调用应用程序处理请求。Addr是我们设定的端口号。

 

 

修改路由规则

router.Get等路由规则不应该写在main包中。

在routers目录新建router.go文件,内容如下:

 

然后修改main.go文件内容:

 

最后使用tree命令查看当前目录结构:

 

然后访问 http://192.168.1.101:8000/test 检查返回正确。

 

【Go】gin Blog项目(一) 基本框架
Tagged on:     
0 0 投票数
Article Rating
订阅评论
提醒

0 评论
内联反馈
查看所有评论