首页 > 数据库 >Gin+GORM+Zap+PostgreSQL的Web后端-Gin进阶

Gin+GORM+Zap+PostgreSQL的Web后端-Gin进阶

时间:2025-01-04 12:55:01浏览次数:1  
标签:Web PostgreSQL err DB gin router go Gin

上一篇文章介绍了Gin和Gin的简单使用,本次介绍Gin进阶使用,并和一些常用的库组合使用,最后测试运行并写入数据到PostgreSQL数据库。

可配置

在configs目录下,新增了config.yml作为配置文件,使用viper库读取配置文件参数,来设置Gin框架和一些其他参数。

func InitConfig() {
	viper.AddConfigPath("./configs")
	viper.SetConfigType("yaml")
	viper.SetConfigName("config")

	if err := viper.ReadInConfig(); err != nil {
		log.Fatalf("fatal error: read config file: %v", err)
	}
	if err := viper.Unmarshal(&AppConfig); err != nil {
		log.Fatalf("set config file error: %v", err)
	}
}

路由分组

新建router目录存放所有路由相关代码,router.go为主路由文件,example.go为分路由文件,使用Gin的路由Group设置路由组。

func InitRouter() *gin.Engine {
	router := gin.New()
	router.Use(gin.Recovery())
	if gin.Mode() == gin.DebugMode {
		router.Use(gin.Logger())
	}
	miniRLoad(router)
	adminRLoad(router)
	return router
}

GORM

全功能ORM,特性:支持事务,批量插入,SQL构建器,自动迁移,灵活的可扩展API,开发者友好。

在configs目录下,新增db.go,作为数据库配置部分,InitDB初始化数据库连接,MigrateDB来迁移模型变更到数据库中,会在启动时自动创建对应的表结构,无需手动在数据库中操作。

func InitDB() *gorm.DB {
	dsn := "host=" + AppConfig.DB.Host + " user=" + AppConfig.DB.User + " password=" + AppConfig.DB.Password + " dbname=" + AppConfig.DB.Name + " port=" + AppConfig.DB.Port + " sslmode=disable TimeZone=Asia/Shanghai"
	db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
		DisableForeignKeyConstraintWhenMigrating: true,
	})
	if err != nil {
		global.Logger.Errorf("Failed to init db connection,error: %v", err)
	}
	return db
}

func MigrateDB() {
	err := global.DB.AutoMigrate(
		&model.Users{},
	)
	if err != nil {
		global.Logger.Errorf("Failed to migrate db,error: %v", err)
		os.Exit(0)
	}
}

Zap日志

在 Go 中实现极快、结构化、分级的日志记录,在官网测试记录中,普遍比其他日志库要快。

在pkg目录下,新建log包,新建logs.go,可以通过zap.NewProduction()来快速初始化Zap日志,但

缺少自定义,像日志格式、日志文件位置和日志切割,这部分代码较长,暂不在这里贴了,后面会提供整个项目代码库地址。

运行测试

上面组件都会在main.go中进行初始化,最后启动Gin框架提供http服务。

使用docker启动PostgreSQL数据库

docker run -d --name example -e POSTGRES_PASSWORD=example -p 5432:5432 postgres

进入项目的server目录下,运行下面命令启动Gin服务

go run main.go

发送一个POST请求到http://127.0.0.1:8080/api/user/add,Body内容如下,正常可在数据库中插入一条数据了。

{
    "userName" : "test",
    "pw":"aa1234"
}

介绍了Gin进阶使用,结合一些流行库,作为一个示例,完整代码请在GitHub上下载,具体链接为https://github.com/robin-2016/gin_example

标签:Web,PostgreSQL,err,DB,gin,router,go,Gin
From: https://www.cnblogs.com/robindevnotes/p/18651771

相关文章

  • linux命令行连接Postgresql常用命令
    1.linux系统命令行连接数据库命令psql-hhostname-pport-Uusername-ddatabasename-h 主机名或IP地址  -p 端口  -U 用户名  -d 连接的数据库2.查询数据库表命令selectversion()  #查看版本号\dg     #查看用户\l       #查......
  • Jmeter 进行websocket接口测试
    什么是websocket协议?Websocket是基于tcp的一种全双通信协议,客户端与服务器之间通过websocket建立连接后,客户端和服务器之间会长时间保持连接状态(即长连接)。客户端可以向服务器发送数据,服务器也可以主动向客户端推送数据。与http协议不同的是http是tcp的单向通信协议,只有客户端向......
  • [Web Fronted] 前端框架: React
    序部分开源项目是基于Web前端框架React构建的,有必要了解一二。避免一脸懵逼,不知道怎么修改相关代码和配置概述:ReactReact的简介React起源于Facebook的内部项目因为该公司对市场上所有JavaScriptMVC框架都不满意,就决定自己写一套,用来架设Instagram的......
  • javaweb仓库仓储系统出入库模块设计
    目录项目介绍具体实现截图开发核心技术:写作提纲开发过程思路核心代码部分展示实验方案:详细视频演示源码获取方式项目介绍本系统主要包括管理员和员工;主要包括:主页、个人中心、员工管理、客户信息管理、供应商管理、仓库信息管理、货物类型管理、货物信息管理、货物......
  • Nginx不停服务版本升级(平滑升级)
    以默认安装路径为例,即nginx主文件为/usr/sbin/nginx备份nginx旧版本,即此例中的/usr/sbin/nginx这一文件;下载nginx新版本压缩包,并解压到需要进行升级的节点任意目录,此处以解压到/root为例;执行如下指令,并将输出的参数复制下来;/usr/sbin/nginx-V定位到新版本解压......
  • SD WebUI必备插件安装,菜鸟轻松成高手!
    一个刚学AI绘画的小菜鸟怎么快速成为StableDiffusionde的高手?答案就是SD插件,只要学会使用SD的各种插件,帮你写正向和负向提示词,修复人脸/身体/手指,高清放大图片,指定人物pose,图片微调等等都可以轻松搞定,善用插件是成为高手必经之路。目录1插件安装方法2基础插件介绍3......
  • vite和webpack有什么区别?
    Vite和Webpack都是现代前端开发中的常见打包工具,它们之间存在一些显著的区别。以下是对这些区别的详细分析:开发环境的响应速度:Vite采用了基于ESModule的开发服务器,只有在需要时才会编译对应的模块,这种方式大幅度提升了开发环境的响应速度。相比之下,Webpack在开发模式下依然......
  • HTML Select Drop Down List Data Source From Web API
    前端,html还是mvc页面,我们想实现一个下拉选单,写<select>指定id或者name,稍后在js代码能获取到它。 #7~#9行,没有参数条件可传,保留为空。#19WebAPI地址。#21为异步方法,看下,#37,是为了不让代码写在一块,Insus.NET已经重构成另一个function,也是本示例中重点核心代码,下面继续看看,......
  • Web安全基础:反序列化漏洞详解(含PHP,Python示例)
    当系统接收和处理外部输入的数据时,可能会通过反序列化过程执行恶意代码或操作。这个漏洞的根本原因在于,系统对反序列化数据的处理不够严格,导致攻击者能够将精心构造的数据注入到反序列化流程中,进而达到远程代码执行、数据篡改、权限提升等目的。序列化与反序列化序列化:将......
  • 发布blazor应用到Linux, 使用nginx作为WebSocket代理
    Blazor使用了SignalR连接,而SignalR使用的是WebSocketWebSocket协议提供了一种创建支持客户端和服务器之间实时双向通信的Web应用程序的方法。作为HTML5的一部分,WebSocket使开发此类应用程序比以前的方法容易得多。大多数现代浏览器都支持WebSocket,包括Chrome、Firefox......