增加关键词搜索,正确处理 LIKE 与查询条件组合)
文章目录引言:搜索框很小,背后的约定不能少一、本篇学习目标与准备二、先约定“搜索”到底是什么意思1. 接口规则2. 为什么把空关键词当成不筛选?3. 为什么不直接承诺“忽略大小写”?三、先分清三个容易混淆的层次1. URL 编码负责把关键词送到后端2. 参数化 SQL 负责把输入作为数据绑定3. LIKE 转义负责让关键词保持字面含义四、先让 ListOptions 接住关键词1. 在原有参数中增加 Query2. 统一清理和校验3. 修改 HTTP 查询参数解析五、正确构造 LIKE 模式1. 本篇选择 ! 作为转义字符2. 为什么单引号不在这份转义列表里?六、把搜索、状态、分页与总数连起来1. 条件只生成一次2. COUNT 与当前页使用同一组条件3. 沿用同一事务内的一致读取七、内存版也要遵守相同搜索规则1. 按 ASCII 折叠,再做子串判断2. 一个兼容旧数据的小边界八、运行完整示例,观察特殊字符是否搜对1. 启动项目2. 创建四条任务3. 搜索 Go,并筛选未完成任务4. 搜索字面特殊字符九、前端接入时,别只把搜索词加进 URL1. 修改条件后重置 offset2. 避免旧搜索响应覆盖新结果3. 搜索列表里的任务仍需携带版本更新十、测试搜索功能,不能只准备一个 Go1. 内存与 SQLite 共用搜索行为测试2. HTTP 测试检查编码与实际结果3. 条件组合与重启测试4. 本次实际执行了什么?十一、为什么本篇不急着增加标题索引?十二、实战练习与下一步练习1:增加仅按前缀匹配的搜索练习2:增加多个关键词练习3:观察查询成本参考资料✍创作者:全栈弄潮儿🏡 个人主页:全栈弄潮儿的个人主页🏙️ 个人社区,欢迎你的加入:全栈开发社区📙 专栏:Go零基础实战引言:搜索框很小,背后的约定不能少第23篇,我们让待办列表支持分页与完成状态筛选;第24篇增加版本号,避免旧请求覆盖新状态。接下来,用户会提出一个很自然的需求:任务太多了,我只想找标题里包含 Go 的未完成任务。给接口增加一个q参数,似乎就能解决:GET /todos?q=Gocompleted=falselimit=20