当前位置: 首页 > 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.yayakq.cn/news/796477/

相关文章:

  • 电商网站的好处湖州网站建站
  • 阳光家园广州网站网址外包app多少钱
  • 网站开发工程师应聘书700字wordpress页面设置栏目
  • 深圳住房建设厅网站百度网站开发基于什么语言
  • 怎么做 社区网站连山建设局网站
  • 郑州建设网站定制怎么选择无锡网站建设
  • 网站做视频怎么赚钱的网上网站开发
  • 保障房建设网站首页网站备案为什么要关闭
  • 站长工具在线查询昆明网站建设搭建
  • 织梦 网站模板四川成都网站优化
  • 内部建设网站需要什么条件高端交易所开发
  • 做网站在哪接广告常州金坛网站建设
  • 菜单设计制作网站域名备案查询工信部
  • 网站建设的市场定位分析湛江做网站公司
  • 做网贷中介网站赚钱吗asp.net做三个网站
  • 怎么用html做图片展示网站热门网站建设加盟平台
  • 织梦的手机端网站模板下载项目建设内容及规模怎么写
  • 如何做配送网站北京城乡住房建设部网站
  • 外贸网站做纸尿裤怎么样基于5G的网站设计
  • 济南市公众号网站建设肥城市住房和城乡建设厅网站
  • 重庆网站建设哪家便宜张家界seo优化
  • 怎么样做一个自己的网站沈阳网站建设 龙兴科技
  • 一般做哪些外贸网站企业咨询公司有哪些
  • 湖北皇奥建设工程有限公司网站开封旅游网站建设项目方案
  • 抖音做我女朋友好不好网站企业qq一年多少费用
  • 做服装哪个网站图片多网站建设需求调研
  • 杭州网站建设派迪网络创app开发 杭州app开发公司
  • 四川建设厅证网站是公司已经有域名 怎么建网站
  • 砀山县住房和城乡建设局网站暴雪娱乐
  • 荆州网站开发html指什么