go get && go install
go get github.com/mailru/easyjson/...
go install github.com/mailrn/easyjson@latest
在 Go 语言中,go get 和 go install 是用于获取和安装 Go 包及其依赖的命令。以下是这两条语句的执行顺序及其作用:
go get github.com/mailru/easyjson/...:
这条命令会从 GitHub 下载 mailru/easyjson 包及其所有子包(/... 表示递归获取所有子包)。同时,go get 会下载并安装这些包的依赖项。
默认情况下,go get 会将包下载到 $GOPATH/src 目录下,并且会编译并安装这些包到 $GOPATH/bin 或 $GOPATH/pkg 目录中。
go install github.com/mailru/easyjson@latest:
这条命令会安装 mailru/easyjson 包的最新版本(@latest 表示最新版本)。
go install 会编译并安装指定的包及其依赖项,生成的可执行文件会被放置到 $GOPATH/bin 目录中。
执行顺序: ① 如果你已经通过 go get 获取了 mailru/easyjson 包及其依赖,那么 go install 可以直接安装最新版本的 easyjson,而不需要再次下载。 ② 如果你还没有执行 go get,那么 go install 会自动下载并安装 mailru/easyjson 包及其依赖。
总结:
- 如果你已经执行了 go get,那么 go install 可以直接执行,不需要再次下载包。
- 如果你还没有执行 go get,go install 会自动处理下载和安装。
- 因此,通常情况下,你可以直接执行 go install,而不需要显式地先执行 go get。
Bloom
布隆过滤器(Bloom Filter)介绍
什么是布隆过滤器? 布隆过滤器是一种高效的、节省空间的概率性数据结构,用于测试一个元素是否属于某个集合。它由 Burton Howard Bloom 在 1970 年提出,广泛应用于数据库、缓存和网络系统中。
工作原理
- 数据结构:布隆过滤器使用一个位数组(bit array)和多个哈希函数。
- 添加元素:将元素通过多个哈希函数计算出若干位置,将位数组中对应的位设置为 1。
- 查询元素: 如果所有哈希位置的位都是 1,则元素“可能”在集合中。 如果任一哈希位置的位为 0,则元素“一定不在”集合中。
特点:
- 无假阴性(False Negative):如果布隆过滤器说元素不在集合中,则一定不在。
- 有假阳性(False Positive):如果说元素在集合中,可能出错(但概率可控)。
优点
- 空间效率:相比哈希表,布隆过滤器占用极少的内存。
- 查询效率:O(k) 时间复杂度,其中 k 是哈希函数数量。
- 快速否定:能快速判断元素不在集合中,适合“过滤”场景。
缺点
- 不支持删除:标准布隆过滤器无法删除元素(有变种如 Counting Bloom Filter 可解决)。
- 假阳性率:随着元素增加,误判率上升,需要合理配置参数。
使用场景
- 数据库:检查键是否存在,避免不必要的磁盘查询(如 LSM-Tree 中的 SSTable)。
- 缓存:判断缓存中是否有某项,减少缓存穿透。
- 网络:检测恶意 URL 或重复数据包。