gin框架结合gorm使用_gin gorm-csdn博客


本站和网页 https://blog.csdn.net/qq_42057890/article/details/113544926 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Gin框架结合gorm使用_gin gorm-CSDN博客
Gin框架结合gorm使用
最新推荐文章于 2024-03-04 15:28:56 发布
月下茶凉 阅读量1w 收藏 53 点赞数 14 分类专栏: gin 文章标签: go
版权声明:本文为博主原创文章,遵循
CC 4.0 BY-SA
版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/qq_42057890/article/details/113544926
版权
专栏收录该内容
1 篇文章
0 订阅
订阅专栏
Gin框架结合Gorm使用
目录
前言
一、介绍
二、使用步骤
1.创建项目
2.开始main.go
3.router的初始化
4.controller的初始化
5.services的初始化
6.models的初始化
7.my.init的初始化
8.开始测试
总结
笔者为golang语言的初学者,之前一直是使用beego框架和框架中自带的orm,使用这一套框架做项目也有大半年了,总的来说对于初学者来讲入门也是可以的。在使用了一段时间当中,渐渐的发现beego框架中有很多自带的插件根本用不上,也许这就是大家说的框架重的原因。于是,最近开始学习另一个轻量级的框架 gin ,并结合 gorm 用来操作数据库使用,实测gin框架下载的插件库比beego框架少了一半。
Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点
对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的
net/http
足够简单,性能也非常不错
借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范
因笔者之前做java开发,习惯使用mvc架构,因此,在转型为golang开发的使用中沿用了这种开发模式。
main.go 文件为整个项目的入口,gin框架的初始化和启动等我都放在这了
app/consts:该层存放常量的定义文件
app/controllers:该层存放控制层的文件
app/model:该层存放实体类文件,以及数据库的初始化文件,我将所有对数据库的操作方法都放在其独自的实体类中
app/router:该层存放所有的路由,经过路由可以跳转到controller层
app/services:该层为业务层(接口类),所有的业务逻辑都写在这一层类中
app/utils:该层为自己写的工具类方法
configure:配置文件放在这里
database:sqlite3的数据库
目前就只添加这些文件夹,后续有其它需求可根据个人自行添加。
代码如下(示例):
package main
import (
"awesomeProject/app/controllers"
"awesomeProject/app/models"
"awesomeProject/app/router"
"github.com/gin-gonic/gin"
"gopkg.in/ini.v1"
"log"
func main() {
r := gin.Default()
// 读取配置文件
conf, err := ini.Load("./config/my.ini")
if err != nil {
log.Fatal("配置文件读取失败, err = ", err)
// 初始化路由路径
router.InitRouter(r)
// 初始化数据库
db := models.InitDB(conf)
defer db.Close()
// 项目的启动端口在这儿设置,也可以从配置文件中读取到这儿
port := ":" + conf.Section("").Key("httpport").String()
if err := r.Run(port); err != nil {
log.Fatal("程序启动失败:", err)
可能会有朋友会有这么一个疑问,为什么我没有把各种初始化的类文件放在同一个文件夹下进行管理,原因是我在另创的一个文件夹下完成初始化数据库的并返回个一个db,在model包中的实体类调用不到这个包中的db这个库,当通过其它的方式调用尝试
后反而出现一个循环导包的错误,因此在目前我没找到其它方法的情况下我将初始化数据的方法类放在model中,这样model中的实体类可直接调用。(后续找到方法后再来改进,也希望大佬们提出您的宝贵意见)
beego会有所不同,只要在一开始进行了数据库的初始化,那么在代码的其它地方就可以通过orm.NewOrm()直接调用操作数据库。
package router
// 将每个模块的路由路径进行拆分,在这儿统一初始化,gin框架的路由启动
func InitRouter(r *gin.Engine) {
// 用户表的路由
UserRouter(r)
// xxx的路由
func UserRouter(r *gin.Engine)
// 因为我在controller将每个controller类实现了初始化,完成多态的实现,这样即使多个不同类中的方法名一样也没有问题,详情见controller层代码
r.GET("/prod", controllers.UserContro.FindAllUser)
r.POST("/prod", controllers.UserContro.SaveUser)
package controllers
var (
// 所有的controller类声明都在这儿
UserContro = &UserController{}
"awesomeProject/app/consts"
"awesomeProject/app/services"
type UserController struct {
func (t *UserController) FindAllUser(c *gin.Context) {
func (t *UserController) SaveUser(c *gin.Context) {
var user models.User
// 将前端穿过来的json数据绑定存储在这个实体类中,BindJSON()也能使用
if err := c.ShouldBindJSON(&user); err != nil {
log.Fatal(consts.BIND_PARAM_ERROR)
// 调用业务层的方法
if err := services.UserService.SaveUser(&user);err != nil {
c.JSON(400, err)
c.JSON(200, "成功")
package services
// 所有的业务类都在这儿声明
UserService = &UserMgr{}
type
UserServices interface {
// 查询所有用户信息
FindAllUser()
// 添加用户信息
SaveUser(user *models.User) error
type UserMgr struct {
func (p *UserMgr) FindAllUser() {
func (p *UserMgr) SaveUser(user *models.User) error {
return models.AddUser(user)
package models
_ "github.com/go-sql-driver/mysql"
"github.com/gogf/gf/os/gfile"
"github.com/jinzhu/gorm"
_ "github.com/mattn/go-sqlite3"
"os"
"path"
// 在其它model的实体类中可直接调用
var db *gorm.DB
func InitDB(conf *ini.File) *gorm.DB {
var err error
// 数据库的类型
dbType := conf.Section("").Key("db_type").String()
// Mysql配置信息
mysqlName := conf.Section("mysql").Key("db_name").String()
mysqlUser := conf.Section("mysql").Key("db_user").String()
mysqlPwd := conf.Section("mysql").Key("db_pwd").String()
mysqlHost := conf.Section("mysql").Key("db_host").String()
mysqlPort := conf.Section("mysql").Key("db_port").String()
mysqlCharset := conf.Section("mysql").Key("db_charset").String()
// sqlite3配置信息
sqliteName := conf.Section("sqlite3").Key("db_name").String()
var dataSource string
switch dbType {
case "mysql":
dataSource = mysqlUser + ":" + mysqlPwd + "@tcp(" + mysqlHost + ":" +
mysqlPort + ")/" + mysqlName + "?charset=" + mysqlCharset
db, err = gorm.Open(dbType, dataSource)
case "sqlite3":
dataSource = "database" + string(os.PathSeparator) + sqliteName
if !gfile.Exists(dataSource) {
os.MkdirAll(path.Dir(dataSource), os.ModePerm)
os.Create(dataSource)
db.Close()
log.Fatal(consts.CONN_DATABASE_ERROR, err)
// 设置连接池,空闲连接
db.DB().SetMaxIdleConns(50)
// 打开链接
db.DB().SetMaxOpenConns(100)
// 表明禁用后缀加s
db.SingularTable(true)
return db
type User struct {
ID
int
`gorm:"column:id; parimary_key", json:"id"`
Name
string `gorm:"column:name" json:"name"`
// 用户名
Accounts string `gorm:"column:accounts" json:"accounts"` // 帐号
PassWord string `gorm:"column:password" json:"password"` // 密码
func FindAllUser()
func AddUser(user *User) error {
if err := db.Create(user).Error; err != nil {
log.Fatal(err)
return consts.ADD_DATA_ERROR
return nil
appname = "gin框架测试"
httpport = 9898
#开启JSON请求
copyrequestbody = true
#数据库类型:mysql/sqlite3
db_type = "mysql"
[mysql]
db_alias = "default"
db_name = "gin_test"
db_user = "root"
db_pwd = "root"
db_host = "127.0.0.1"
db_port = 3306
db_charset = "utf8"
[sqlite3]
db_name = "gin_test.db"
启动项目后,开始使用postman进行测试。
查看数据库中数据
这里只是笔者经过自己的理解和测试,而构建出的一个简单的层次,后续也会继续学习进行改进,也希望有错误的地方能有各位大佬指正,有宝贵的意见也希望您能提出,共同学习。
优惠劵
关注
点赞
觉得还不错?
一键收藏
知道了
评论
Gin框架结合Gorm使用目录Gin框架结合Gorm使用前言一、介绍二、使用步骤1.创建项目2.开始main.go3.router的初始化4.controller的初始化5.services的初始化6.models的初始化7.my.init的初始化8.开始测试总结前言笔者为golang语言的初学者,之前一直是使用beego框架和框架中自带的orm,使用这一套框架做项目也有大半年了,总的来说对于初学者来讲入门也是可以的。在使用了一段时间当...
复制链接
扫一扫
专栏目录
_curd:基于
gorm
快速生成curd代码
03-10
根据模型快速生成基于
的嵌入项目
标签:
凝乳
搜索
搜索:喜欢模糊查询
search:true搜索
例子:
type TestModel struct {
Model
Account
string `
:"account" curd:"search" binding:"required"`
Password string `
:"password"`
RealName string `
:"real_name"`
"github.com/liujunren93/curl_
/example/handler/models"
"fmt"
curd "github.com/liujunren93/curl_
"
func main () {
//build()
func bu
Go语言
Gin
框架
Gorm
实战CRUD
ecloud_developer的博客
12-21
723
是 Go 编程语言中流行的开源库。但是,它们服务于不同的目的,通常在 web 开发项目中一起
使用
是一个用于构建 HTTP 服务器的 web
。它提供了一个简单易用的 API,用于处理 HTTP 请求和响应、路由、中间件和其他常见的 web 应用程序所需的功能。它以其高性能和简约为特点,提供了轻量级和灵活的解决方案来构建 web 服务器。
是 Go 的一个 ORM(对象关系映射)库。
参与评论
您还未登录,请先
登录
后发表或查看评论
GORM
操作数据库(MySQL)
阿澈不吃蒜的博客
12-12
1413
是 Golang 的一个 orm
。简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。
ORM
可以让我们更方便的操作数据库。
&
学习笔记
Mr朱鹏的博客
03-04
1231
增删改查目录
weixin_41692437的博客
01-17
678
Go-web开发快速入门——一、
完成用户注册登录及用数据库存储用户信息(附源码,超详细)
qq_50737715的博客
04-18
7186
完成用户注册登录及用数据库存储用户信息
参考资料:
中文文档
一、准备
本项目所
的所有工具如下:
Visual Studio Code —— 编写并运行Go程序
MySql —— 建立数据库
Postman —— 接口测试
Navicat Premium —— 数据库可视化
首先进行相关的配置:
1.新建一个项目文件夹
2.
go mod初始化项目模块
go mod init 项目模块名称
执行完毕后项目下会出现一个go.
学习-
入门指南
林钟一的博客
07-06
3300
快速入门
LJT_SIX的博客
09-12
1387
最近也是正在学习
得组合,跟着网上得视频敲了一个很简单得小项目,麻雀虽小五脏俱全,还是值得记录以下。
Go语言项目
实现后端的注册和登录功能
pyscl01的博客
04-19
1708
实现后端的注册和登录功能的详细步骤
项目:
jwt发放token,
中间件实现用户认证以及以及封装http返回格式
1722
中间件实现用户认证以及封装http返回
简单了解
weixin_47906106的博客
01-13
728
ORM优缺点
优点
提高开发效率
缺点
牺牲执行性能
牺牲灵活性
弱化SQL能力
创建数据表
"github.com/jinzhu/
_ "github.com/jinzhu/
/dialects/mysql"
type UserInfo struct {
ID int
Name string
Gender string
Hobby string
// 连接数据库
基于
的小清单系统
08-01
该小项目,是用
来写的,功能很简单,就是前端发送各种请求,后端来响应。
go web项目
(viper+
)适合初学者
01-26
练手小项目-bubble前后端代码合集
09-22
Bubble 是一个
ORM 库开发的练手小项目,旨在帮助开发者熟悉
,并实践常见的 Web 开发模式和技术栈。Bubble 是一个简单的网页,用户可以发布任务、浏览任务、更新状态等操作...
golang 网络
方法
09-18
主要介绍了golang 网络
方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
安装以及
的请求路由
01-20
window 上安装
,需要先安装git ,go 环境,然后打开git,在你想要的地方安装go就可以 比如在 /e/golang/
安装
在git命令行中输入mkdir -p $GOPATH/
1 然后没有报错的话就说明创建成功了,然后进入该文件下...
C#,数值计算,解微分方程的龙格-库塔二阶方法与源代码
04-25
微分方程
含有导数或微分的方程称为微分方程,未知函数为一元函数的微分方程称为常微分方程。
微分方程的阶数
微分方程中导数或微分的最高阶数称为微分方程的阶数。
微分方程的解
使得微分方程成立的函数称为微分方程的解。
微分方程的特解
微分方程的不含任意常数的解称为微分方程的特解。
微分方程的通解
所含相互独立的任意常数的个数与微分方程的阶数相等的微分方程的解称为微分方程的通解。
桌面聊天室
该毕业设计采用了c/s架构,通过javase中的知识编写完成,系统功能包括:用户注册,用户登录,聊天功能。
对于刚学完java基础的同学来说可以通过该毕业设计加深对所学知识的理解。该系统
socket进行数据的发送,用户注册登录之后,可以进行多人聊天,功能类似qq群聊。
【前端素材】大数据-交通大屏.zip
最新发布
大数据技术指的是用于处理和分析大规模数据集的技术和工具。以下是一些常见的大数据技术和工具:
Hadoop:Apache Hadoop是一个用于分布式存储和处理大规模数据的开源
。它包括Hadoop Distributed File System(HDFS)用于数据存储和MapReduce用于数据处理。
Spark:Apache Spark是一个快速、通用的集群计算系统,提供了比MapReduce更快的数据处理能力。它支持内存计算和更多复杂的数据处理流程。
NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。
数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。
数据湖:数据湖是一个存储结构化和非结构化数据的存储池,用于支持数据分析和机器学习应用。
机器学习:大数据技术也广泛应用于机器学习领域,支持大规模数据的模型训练和预测分析。
流式处理:针对实时数据处理需求,流式处理技术(如Apache Kafka、Apache Flink)可以实时。
当中
06-01
好的,你想了解在
中如何
吗?
首先,你需要在你的项目中导入
的依赖。在导入之后,你可以在你的代码中创建一个
的数据库实例,然后
它来执行数据库的操作。
以下是一个示例代码片段,展示了如何在
```go
"github.com/
-gonic/
.io/driver/mysql"
.io/
// 创建数据库连接
dsn := "user:password@tcp(127.0.0.1:3306)/database_name?charset=utf8mb4&parseTime=True&loc=Local"
db, err :=
.Open(mysql.Open(dsn), &
.Config{})
if err != nil {
panic("failed to connect database")
// 将数据库实例作为
的中间件
r :=
.Default()
r.Use(func(c *
.Context) {
c.Set("db", db)
c.Next()
})
// 在路由处理函数中
数据库
r.GET("/users", func(c *
var users []User
result := db.Find(&users)
if result.Error != nil {
c.JSON(500,
.H{"error": "failed to get users"})
return
c.JSON(200, users)
// 启动
服务器
r.Run(":8080")
```
在上面的代码中,我们创建了一个
的数据库实例,并将其作为
的中间件,使得在路由处理函数中可以直接
该数据库实例来进行数据库的操作。在示例代码中,我们定义了一个 `/users` 的路由,当接收到 GET 请求时,会
查询数据库中的所有用户,并将结果以 JSON 格式返回给客户端。
希望这个例子可以帮助你理解在
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
CSDN认证博客专家
CSDN认证企业博客
码龄6年
暂无认证
原创
77万+
周排名
128万+
总排名
3万+
访问
等级
179
积分
粉丝
25
获赞
89
私信
热门文章
10656
Kafka配置安全认证
5721
Flink问题集合
2896
thingsboard没有gen目录解决方法
2408
安装zookeeper和kafka过程中遇到的问题
1618
分类专栏
flink
1篇
问题
4篇
protocol buffer
kafka
2篇
elasticsearch
docker
thingsboard
pipeline
gitlab
最新评论
南风Candy:
您好 有关thingsboard的问题需要请教,方便加您Q吗
smilling245623:
这个报错后来解决了吗?
遛码:
1.为用户 alice 在 test(topic)上添加读写的权限
./bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ip:2181 --add --allow-principal User:alice --operation Read
--operation Write --topic test
这个添加写权限的,如果有多个Topic时要一个一个添加吗?
大侠按你的方法配置后,kafka-topics.sh --create --replication-factor 2 --partitions 1 --topic test2 -bootstrap-server ip:9092创建和查看Topic超时,用那带--zookeeper 的可以
想当厨子的小章同学:
你好,我按照您的方式配置,启动kafka 的时候一个告警,一个报错
WARN SASL configuration failed: javax.security.auth.login.LoginException: No JAAS configuration section named 'Client' was found in specified JAAS configuration file: '/opt/kafka/config/kafka_server_jaas.conf'. Will continue connection to Zookeeper server without SASL authentication, if Zookeeper server allows it. (org.apache.zookeeper.ClientCnxn)
ERROR [ZooKeeperClient] Auth failed. (kafka.zookeeper.ZooKeeperClient)
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
最新文章
Windows下使用proto问题记录
2021年
13篇
2020年
被折叠的 
 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
红包个数最小为10个
红包总金额
红包金额最低5元
余额支付
当前余额
3.43
前往充值 >
需支付:
10.00
取消
确定
下一步
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值