当前位置: 首页 > news >正文

多用户商城网站建设结构优化设计

多用户商城网站建设,结构优化设计,青州网站开发,橙子落地页建站教程背景 上一章 Go语言开发基于SQLite数据库实现用户表新增接口(二) 这一章我们实现用户表的查询详情接口 代码实现 mapper层 type UserMapper interface {GetById(id uint64) (*model.User, error)}type userMapper struct { }func (m *userMapper) GetById(id uint64) (*mod…

背景

上一章
Go语言开发基于SQLite数据库实现用户表新增接口(二)
这一章我们实现用户表的查询详情接口

代码实现

mapper层

type UserMapper interface {GetById(id uint64) (*model.User, error)}type userMapper struct {
}func (m *userMapper) GetById(id uint64) (*model.User, error) {// 创建 model.User 的指针实例user := &model.User{}result, err := model.GetById(user.TableName(), id, user)if err != nil {return nil, err}// 确保返回的结果是 *model.User 类型user, ok := result.(*model.User)if !ok {return nil, fmt.Errorf("expected *model.User, but got %T", result)}return user, nil
}

ModelTable实现

func GetById(tableName string, id uint64, dest interface{}) (interface{}, error) {// 确保 dest 是指针类型val := reflect.ValueOf(dest)if val.Kind() != reflect.Ptr || val.IsNil() {return nil, fmt.Errorf("dest must be a non-nil pointer")}// 构造 SQL 查询query := fmt.Sprintf("SELECT * FROM %s WHERE id = ? LIMIT 1", tableName)// 执行查询row := config.Db.QueryRow(query, id)// 获取结构体的字段fieldPointers, err := getFieldPointers(reflect.TypeOf(dest).Elem(), reflect.ValueOf(dest).Elem())if err != nil {return nil, err}// 使用 Scan 将查询结果映射到结构体err = row.Scan(fieldPointers...)if err != nil {if err == sql.ErrNoRows {return nil, fmt.Errorf("No rows found with id %d", id)}return nil, err}return dest, nil
}// 递归地获取结构体字段的指针(支持嵌套结构体)
func getFieldPointers(t reflect.Type, v reflect.Value) ([]interface{}, error) {var fieldPointers []interface{}for i := 0; i < t.NumField(); i++ {field := t.Field(i)fieldValue := v.Field(i)// 如果字段是结构体类型,递归进入if fieldValue.Kind() == reflect.Struct {// 递归处理嵌套的结构体字段nestedPointers, err := getFieldPointers(field.Type, fieldValue)if err != nil {return nil, err}fieldPointers = append(fieldPointers, nestedPointers...)} else {// 否则将字段的指针添加到字段指针数组fieldPointers = append(fieldPointers, fieldValue.Addr().Interface())}}return fieldPointers, nil
}

这里我们映射的结构体中的对应db字段 , 这样的好处是我们这个方法是基础方法,其他结构体中只要有ModelTable结构体,我们就可以直接继续使用了。
在这里插入图片描述

service层

type UserService interface {GetById(id uint64) (*model.User, error)}

service实现层

type UserServiceImpl struct {m mapper.UserMapper
}func (u UserServiceImpl) GetById(id uint64) (*model.User, error) {return u.m.GetById(id)
}

controller层

type UserController struct {UserService service.UserService
}func (u *UserController) GetById(rc *req.Ctx) {id := uint64(req.PathParamInt(rc.GinCtx, "id"))user, err := u.UserService.GetById(id)assert.IsNil(err)rc.ResData = user
}

这里有个PathParamInt方法 获取路径上面的参数

func PathParamInt(g *gin.Context, pm string) int {value, _ := strconv.Atoi(g.Param(pm))return value
}

接口

在这里插入图片描述

测试

在这里插入图片描述

源码地址

使用Go语言开发基于SQLite数据库实现用户表相关接口项目示例,可进行扩展,拿来即用

参考

代码风格参考的mayfly-go ,SQLite这块是自己实现的

http://www.shuangfujiaoyu.com/news/24600.html

相关文章:

  • 如何做网站嵌入腾讯地图广告联盟平台入口
  • 做购物网站怎么写开题报告拉新人拿奖励的app
  • wordpress 本地 域名兰州网络推广关键词优化
  • 只有域名怎么做网站html网页制作代码大全
  • 怎么做网站赚钱google官网入口手机版
  • 软件开发的六大步骤搜索关键词排名优化技术
  • 建设部中国建设工程信息网最新seo课程
  • 网站维护员工作内容百度认证平台
  • 单招网是哪个网站制作公司做的信息流优化师职业规划
  • 做网站的需求是吗企业网站设计与推广
  • 公司做网站的费用怎么账务处理百度搜索开放平台
  • 智能网站建设冯宗耀seo教程
  • 改变网站字体软文什么意思范例
  • 做网站的材料南昌seo管理
  • 做网站的程序源码青岛网站seo服务
  • 广州建站软件如何自己搭建网站
  • 丰宁县有做网站的吗友情链接适用网站
  • 申请建设政府门户网站北京seo排名厂家
  • 网站建设图片怎么做百度手机浏览器
  • 制作表白网站口碑营销的产品
  • 酷站网官网全国免费发布广告信息
  • 网站后台如何更改百度文库网页版登录入口
  • 一级a做美国片免网站沈阳网站seo公司
  • 好的培训网站模板免费网站流量统计
  • 欧美做愛网站A级sem竞价托管价格
  • 做网站用php如何学习百度电话客服24小时人工服务热线
  • 怎样用word做网站新东方英语培训机构官网
  • 教育网站建设需求分析报告网络营销运营公司
  • 做网站的时候公共部分怎么分离外包推广服务
  • 怎么在网站底部添加备案号百度关键词seo优化