我说古法编程真的能学到东西有没有人懂的
- - -
~~这篇疑似有点标题党了~~

从暑假开始，Linserin 自行学习了 [Go](https://golang.google.cn/)，创建了一个简单的代码库搜索工具，这个工具的框架由 Linserin 人工编写，少部分是不懂而询问 AI / 由 GitHub Copilot Inline Suggestion 提供。

由于这个实在没有什么星标的价值，而且一个稍微前沿一点的 AI 模型都能写得比我好，我也就没有 new 一个 repo 在 GitHub 上，而是上传到我的 Atlassian 团队的 Bitbucket 下。仓库地址：(https://bitbucket.org/linserin/go-fast-grep/src)

既然如此，也就顺便记录一下我遇到了收获了什么

## 字符串切分
事情是这样的，一开始我写的是 `WalkDir` 后搜索匹配到的文件内容，但是我大意了，我的做法是把获取到的 `[]byte` 进行搜索，Match 到 Query 后直接把 Query 前的截断，这个非常致命的逻辑直接导致了后面所有的 Query 偏移量都是截断后的内容的 Match 结果，而不是原文件中的偏移量。

也就是说，如果需要获取原本的偏移量，就需要将前面所有的偏移量加在一起才是原文件中正确的偏移量。

而恰巧，我是直接把截断后的 Match 结果当成了偏移量。

（更何况，截断的性能理论上应该更加低）

## `append()` 的使用
嘛啊，我是使用 `[]int` 来存储搜索的偏移量的，于是我也是了解到了 `append()` 的用法了：

- 添加内容直接使用 `append()`

- 删除内容是使用 `append()` 把改元素后面的元素搬过来进行覆盖操作

## 老生常谈
老生常谈就是永远不要相信用户会按照你所期待的那样使用你编写的程序，因为你永远都不知道用户如何使用你的程序...
