Docker容器技术原理

笔记  Go 

Docker容器技术原理chroot什么是busybox?什么是chroot呢?用 chroot 仅仅隔离了文件系统根目录,但没有隔离其他资源,因此还不能称之为一个完整的容器。想实现容器,我们还需要Linux内核的其他特性NamespaceNamespace对内核资源进行隔离,使得容器中的进程都可以

Golang并发模型: worker pool

笔记  Go 

worker pool启动固定数量的工作协程(workers),把任务分配给这些协程处理使用worker pool实现md5计算package mainimport ("crypto/md5""encoding/json""fmt"&quo

Golang 并发模型:Pipelines

笔记  Go 

package mainimport ("crypto/md5""fmt""log""os""path/filepath")type result struct {path stringsum [m

Go-zero常用命令

笔记  Go 

api命令生成文档goctl api doc --o docs --dir ../根据api文件生成项目结构goctl api go --api user.api --dir ../验证api文件是否有效goctl api validate --api user.api 根据api文档生成响应的

Go 1.22版本前for循环问题

笔记  Go 

Go 1.22版本前for循环问题在 Go 1.22 版本之前,for 循环声明的变量只创建一次,并在每次迭代中更新。在 Go 1.22中,循环的每次迭代都会创建新变量,这将会避免意外的共享错误发生。解决办法

布隆过滤器

笔记  Go 

布隆过滤器参考: https://dbwu.tech/posts/bloom_filter/基本概念布隆过滤器是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。实现原理布隆过滤器使用一个位数组合多个哈希函数来实现。位数组: 一个包含m位的数组,初始

Golang channel 底层

笔记  Go 

Channel1. 简介Channel 是 Go 语言中一种特殊的类型,它是一个并发安全的队列,用于在 goroutine 之间传递数据。2. 数据结构Channel 的数据结构如下:2.1 hchantype hchan struct { // 循环队列 qcount uint

Golang slice切片

笔记  Go 

扩容原理切片的扩容流程源码位于 runtime/slice.go 文件的 growslice 方法当中,其中核心步骤如下:• 倘若扩容后预期的新容量小于原切片的容量,则 panic• 倘若切片元素大小为 0(元素类型为 struct{}),则直接复用一个全局的 zerobase 实例,直接返回• 倘

Golang map底层结构

笔记  Go 

Golang map底层数据结构https://golang.design/go-questions/map/principal/Golang map 实现原理概述map是一种常用的数据结构,核心特征包括下面三点:存储基于key-value对映射的模式基于key维度实现存储数据的去重读,写,删操作控

go并发-采用最快回应

笔记  Go 

package mainimport ("fmt""math/rand""time")func fetchData(server string, ch chan<- string) {time.Sleep(time.Duration(