千家信息网

Go微服务实践之如何使用增删改查

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"Go微服务实践之如何使用增删改查",在日常操作中,相信很多人在Go微服务实践之如何使用增删改查问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Go微服务
千家信息网最后更新 2026年11月02日Go微服务实践之如何使用增删改查

这篇文章主要介绍"Go微服务实践之如何使用增删改查",在日常操作中,相信很多人在Go微服务实践之如何使用增删改查问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Go微服务实践之如何使用增删改查"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

首先我们从 model 层开始,来说说go-zero 的API以及封装细节。首先 model 层连接的API集中在core/stores。我们先来看看操作 mysql 这类数据库,API方法我们来到 core/stores/sqlx,所以接下来用几篇的文章总体介绍一下 sqlx 的使用和设计思想。

快速使用

func main() {  // 1  const datasource = "user:password@/dbname"  mysqlDB := sqlx.NewMysql(datasource)  // 2  um := model.NewUserModel(mysqlDB,"User")  // 3  ul := logic.NewUserLogic(um)  // 4  engine.AddRoutes(nginxApi(ul))  engine.Start()}// NewUserModel,NewUserLogic 类似func NewUserModel(conn sqlx.SqlConn, table string) *UserModel {        return &UserModel{conn: conn, table: table}}// nginxApi将logic注入到handle,同时绑定路由和handlerfunc nginxApi(ul *logic.UserLogic) []rest.Route {        return []rest.Route{                {                        Method:  http.MethodGet,                        Path:    "/user/:id", // /user/54er6;                        Handler: handler.NewUserHandler(ul).GetUserById,    }}

总结一下:

  1. NewMysql 创建数据库连接

  2. 创建相应的 model,并将连接传入「相应的 NewModel 需要开发者编写」

  3. model 是为上一层 logic 提供服务

  4. 将 logic 注入到 handler 中,同时 handler 与路由绑定,开启 Server

这样 model-logic-handler 最简单的结构就出来了。然后来看看在 model 层如何进行数据操作:

var userBuilderQueryRows = strings.Join(builderx.FieldNames(&User{}), ",")type User struct {  Avatar string `db:"avatar"` // 头像  UserName string `db:"user_name"` // 姓名  Sex int `db:"sex"` // 1男,2女  MobilePhone string `db:"mobile_phone"` // 手机号}func (um *UserModel) Insert(user *User) (int64, error) {  const insertsql = `insert into `+um.table+` (`+userBuilderQueryRows+`) values(?, ?, ?)`  // insert「delete使用方式一致」  res, err := um.conn.Exec(insertsql, user.Avatar, user.UserName, user.Sex, user.MobilePhone)  if err != nil {    logx.Errorf("insert User Position Model Model err, err=%v", err)    return -1, err  }  id, err := res.LastInsertId()        if err != nil {                logx.Errorf("insert User Model to Id  parse id err,err=%v", err)                return -1, err        }        return id, nil}func (um *UserModel) FindOne(uid int64) (*User, error) {  var user User  // query  const querysql = `select `+userBuilderQueryRows+` from `+um.table+` where id=? limit 1`        err := um.conn.QueryRow(&user, querysql, uid)        if err != nil {                logx.Errorf("userModile.findOne error ,id=%d,err=%s", uid, err.Error())                if err == sqlx.ErrNotFound {                        return nil, ErrNotFound                }                return nil, err        }        return &user, nil}
  • insert/update/delete:conn.Exec(insertsql/updatesql/deletesql, args...)

  • query:conn.QueryRow(&model, querysql, args...)

上述就是最简单的 crud 的结构:首先是构建 model ,然后操作 model 进行操作。

代码结构

文件名作用
bulkinserter.go批量插入
mysql.goNewMysql
orm.go解析,序列化model的操作
sqlconn.go抽象crud操作的接口
tx.go事务操作

从 sqlconn.go 的相互接口关系:

可以看出:commonSqlConn 和 txSession 是真正实现的地方。先从 API 的功能整体介绍一下:

API参数作用
Exec(query, args...)sql, sql参数insert/update/delete
Prepare(query)sql预编译sql
QueryRow(&model, query, args...)model, sql, sql参数查询一行数据同时赋值给「model」
QueryRowPartial(&model, query, args...)model, sql, sql参数功能同上,但是select sql可以只选取model的部分column「映衬Partial」
QueryRows/QueryRowsPartial同上查询多行API
Transact(func(session Session) error)事务操作将参数中的操作用事务包裹,开发者只需专注参数中的函数编写

到此,关于"Go微服务实践之如何使用增删改查"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

参数 实践 数据 学习 事务 同时 结构 接下来 作用 功能 开发者 接口 数据库 文章 方法 更多 路由 帮助 开发 查询 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云南咖啡 广州万易互联网科技有限公司 广州大一互联网络科技有限公司 互联网科技作文 互联网金融科技创新 伴你行互联网科技有限公司 互联网科技网站 国外互联网科技网站 互联网科技股有哪些 哈尔滨秒房互联网科技有限公司 青海省互联网新科技 蓝色互联网科技 河南猎农互联网科技有限公司 互联网科技公司有风险吗 成都互联网科技公司工作好不好 想开互联网科技公司怎么样 工业互联网等科技实现智能化赋能 特约风豹互联网科技为什么扣费 九思连强互联网电子科技有限公司 恒生科技互联网指数十大成分股 互联网黑科技 互联网科技公司税收优惠 工业互联网科技新基建 深圳互联网科技公司 互联网科技公司介绍 互联网科技产品 互联网科技热点资讯 杭州披云加互联网科技有限公司 云南互联网科技学费 北京瑞云互联网科技有限公司
0