Go语言开发基于SQLite数据库实现用户表查询详情接口(三)
背景
上一章
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这块是自己实现的
相关文章:
Go语言开发基于SQLite数据库实现用户表查询详情接口(三)
背景 上一章 Go语言开发基于SQLite数据库实现用户表新增接口(二) 这一章我们实现用户表的查询详情接口 代码实现 mapper层 type UserMapper interface {GetById(id uint64) (*model.User, error)}type userMapper struct { }func (m *userMapper) GetById(id uint64) (*mod…...
(11)(2.1.7) FETtec OneWire ESCs(二)
文章目录 前言 3 组态 4 可选功能 5 SITL模拟 6 故障排除 前言 !Note 此功能在固件版本4.1.1及更高版本上可用。 3 组态 FTW掩码 SERVO_FTW_MASK 参数选择将哪些伺服输出(如果有的话)路由到 FETtec ESC。更改此参数后需要重新启动。…...
Springboot maven常见依赖、配置文件笔记
pom.xml文件 一、<parent> 在Maven项目中,pom.xml 文件中的 <parent> 元素用于定义父项目的坐标。使用 <parent> 可以实现继承机制,子项目可以从父项目继承配置信息,比如依赖管理、插件配置等。这样可以避免在多个子项目…...
Ceph后端两种存储引擎介绍
Ceph是一个可靠的、自治的、可扩展的分布式存储系统,它支持文件系统存储、块存储、对象存储三种不同类型的存储,以满足多样存储的需求。在Ceph的存储架构中,FileStore和BlueStore是两种重要的后端存储引擎,下面将分别进行详细介绍…...
C++入门基础知识140—【关于C++ 类构造函数 析构函数】
成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C 类构造函数 & 析构函数的相关内容…...
基于标签相关性的多标签学习
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
macOS系统下使用SQLark连接达梦数据库
目录 下载 SQLark 客户端 安装 SQLark 客户端 SQLark用户界面 使用SQLark连接达梦数据库 1. 选择达梦数据库 2. 输入连接信息 3. 测试连接 4. 创建连接 5. 验证连接成功 作为一名数据库开发者,在macOS系统上找到一款支持达梦数据库的数据库开发和管理工具&…...
爬虫如何解决短效代理被封的问题?
在数据采集的征途上,短效代理如同一把双刃剑,它既能为我们带来速度和效率,也可能因为频繁更换IP地址而遭遇被封禁的风险。那么,作为数据采集er的我们,该如何巧妙应对,确保爬虫的稳定运行呢?今天…...
Jmeter基础篇(22)服务器性能监测工具Nmon的使用
一、前言 我们在日常做压测的过程中,不仅仅需要监控TPS,响应时间,报错率等这些系统基础性能数据,还需要对服务器的性能(如CPU、磁盘、内存、网络IO等)做监控,以求对系统运行过程中的硬件性能有…...
Spring Boot 集成 RabbitMQ:消息生产与消费详解
在现代微服务架构中,消息队列扮演着至关重要的角色,RabbitMQ 是其中一种广泛使用的消息中间件。本文将详细介绍如何在 Spring Boot 项目中集成 RabbitMQ,实现消息的生产和消费,并提供相应的代码示例。 一、环境准备与依赖配置 首…...
JSON-RPC-CXX深度解析:C++中的远程调用利器
一、引言 1. JSON-RPC 简介及其在 C 开发中的重要性 JSON-RPC(JavaScript Object Notation - Remote Procedure Call)是一种基于 JSON 格式的远程过程调用协议。在 C 开发中,它扮演着至关重要的角色。随着软件系统的日益复杂和分布式架构的…...
【后端速成Vue】模拟实现翻译功能
前言: 本期将会介绍 Vue 中的 watch 侦听器,它语法是怎么样的呢?具有怎样的功能呢?最后用模拟实现百度翻译来更进一步练习 watch 侦听器 篮球哥找工作专属IT岗位内部推荐: 专属内推链接:内推通道 1、认识翻…...
人脸识别技术:从算法到深度学习的全面解析
一、人脸识别技术综述 人脸识别技术作为一种重要的生物识别技术,在当今社会中具有举足轻重的地位。它广泛应用于各个领域,如金融领域的实名认证、安保领域的门禁系统、通行领域的火车站和地铁站检票、泛娱乐领域的美颜相机和短视频特效处理、公安和司法…...
WPF学习之路,控件的只读、是否可以、是否可见属性控制
C#的控件学习之控件属性操作 控件的只读、是否可以、是否可见,是三个重要的参数,在很多表单、列表中都有用到,正常表单控制可以在父层主键控制参数是否可以编辑和可见,但是遇到个别字段需要单独控制时,可以在初始化wi…...
植物神经紊乱不用怕,科学锻炼助你找回平衡✨
在这个快节奏、高压力的时代,你是否经常感到身心疲惫,情绪波动大,甚至偶尔还会出现心慌、失眠、消化不良等症状?这些可能都是植物神经功能紊乱在作祟!😱别担心,今天就来聊聊如何通过科学锻炼&am…...
shell 100例
1、每天写一个文件 (题目要求) 请按照这样的日期格式(xxxx-xx-xx每日生成一个文件 例如生成的文件为2017-12-20.log,并且把磁盘的使用情况写到到这个文件中不用考虑cron,仅仅写脚本即可 [核心要点] date命令用法 df命令 知识补充࿱…...
CSS教程(二)- CSS选择器
1. 作用 匹配文档中的某些元素为其应用样式。根据不同需求把不同的标签选出来。 2. 分类 分类 基础选择器 包含 标签选择器、ID选择器、类选择器、通用选择器等 复合选择器 包含 后代选择器、子代选择器、伪类选择器等 1 标签选择器 介绍 又称为元素选择器,根…...
Ubuntu20.04 解决一段时间后键盘卡死 输入延迟很大的问题 ubuntu
Ubuntu20.04 解决一段时间后键盘卡死 输入延迟很大的问题 为了确保您能顺利通过双击快捷方式来重启 IBus,下面详细描述了从脚本创建到快捷方式设置的每一步,包括具体的命令行操作和必要的说明,以确保您能够按步骤成功执行。 步骤 1: 创建并…...
http(s)接口设计注意事项
http(s)在设计时应考虑: 一、签名认证 鉴权,如jwt方式等。 二、重要参数加密 如:用户的登录密码、银行卡号、转账金额、用户身份证等。 三、IP白名单 为了进一步加强API接口的安全性,防止接口的签名或者加密被破解了&#x…...
Font Awesome Web 应用图标
Font Awesome Web 应用图标 引言 在当今的数字时代,图标在Web应用中扮演着至关重要的角色。它们不仅增强了用户界面的视觉吸引力,而且还提高了用户体验和互动性。Font Awesome是一个广受欢迎的图标库,它为开发人员提供了一系列高质量的图标,可以轻松地集成到Web应用中。本…...
AArch64 SCTLR_EL3寄存器解析与安全配置实践
1. AArch64 SCTLR_EL3系统控制寄存器深度解析在Armv8-A/v9-A架构的安全世界中,SCTLR_EL3寄存器扮演着系统控制中枢的角色。作为EL3(最高特权级别)的系统控制寄存器,它直接决定了安全监控模式(Secure Monitor࿰…...
ABAP云迁移中SAML Bearer断言实战指南
1. 这不是“配置一下就能用”的流程——SAML Bearer Assertion 在 ABAP 云迁移中到底在替谁干活?你刚接手一个 SAP S/4HANA Cloud 扩展项目,客户要求“把本地 ABAP 系统里的用户身份,安全地透传到新上线的 Node.js 微服务里”。运维同事甩来一…...
如何修复损坏的QR码?QRazyBox完整使用指南
如何修复损坏的QR码?QRazyBox完整使用指南 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否曾经遇到过这样的困境:一张重要的QR码因为打印模糊、污渍或人为损坏而…...
终极指南:3分钟学会用Awoo Installer免费安装Switch游戏
终极指南:3分钟学会用Awoo Installer免费安装Switch游戏 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 还在为Switch游戏安装而烦恼吗…...
IT运维、远程协助必看!ToDesk录屏功能实测:被控方也能“回放”操作全程
Hello大家,不知道各位有没有注意到,在ToDesk远程控制上新的V4.8.8.9版本中,无论是在基本设置还是在远控连接过程中的悬浮球功能栏里都能看见【录屏设置/开始录屏】这一项!那么,这究竟是何意味呐?又有哪些人…...
告别泊车翻车!用Python手把手教你搭建二自由度车辆模型(附代码)
二自由度车辆模型实战:从原理到避坑指南 泊车时方向盘打满,仿真结果却和实际相差十万八千里?很多刚入行自动驾驶仿真的工程师都踩过这个坑。二自由度模型作为车辆动力学的基础工具,在高速巡航等小转角场景表现优异,但遇…...
打破网盘限速:9大平台直链解析工具全攻略
打破网盘限速:9大平台直链解析工具全攻略 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云…...
SQLite Viewer:3分钟学会在线查看SQLite数据库的终极方案
SQLite Viewer:3分钟学会在线查看SQLite数据库的终极方案 【免费下载链接】sqlite-viewer View SQLite file online 项目地址: https://gitcode.com/gh_mirrors/sq/sqlite-viewer 想象一下,你收到一个SQLite数据库文件,需要立即查看其…...
终极指南:ViGEmBus虚拟游戏控制器驱动,Windows游戏输入革命性解决方案
终极指南:ViGEmBus虚拟游戏控制器驱动,Windows游戏输入革命性解决方案 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 想要在Windows…...
Mos:macOS 鼠标滚轮太生硬?这款免费开源工具让你的滚轮爽如触控板
如果你刚从 Windows 转到 macOS,或者习惯了 MacBook 触控板丝滑的滚动体验,再插上鼠标用滚轮时,大概率会觉得哪里不对劲——网页一顿一顿地跳,代码编辑器里翻行像在打碟,哪怕是在备忘录里上下滑动,那种生涩…...
