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维度实现存储数据的去重读,写,删操作控

缓存淘汰策略

笔记 

FIFOFIRST IN FIRST OUT 先进先出每次淘汰最早添加的记录,但是很多记录添加的早,还访问很频繁,这样的话命中率就不高。LFU淘汰缓存中使用频率最低的。LFU 认为如果数据过去被访问多次,那么将来被访问的频率也会很高。LFU 的实现需要维护一个按照次数排序的队列,每次访问后元素的访问

go并发-采用最快回应

笔记  Go 

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

基于worker pool实现计算num的平方

笔记  Go 

package mainimport ("fmt""sync")func worker(ch <-chan int, result chan<- int) {defer wg.Done()for v := range ch {result <

基于worker pool实现并发下载图片

笔记  Go 

package mainimport ("fmt""io""log""net/http""os""path/filepath""strings""sy

go race detector

笔记  Go 

package mainimport ("fmt""sync")var mutex sync.Mutexfunc main() {var count = 0var wg sync.WaitGroupwg.Add(10)for i := 0; i < 10

go切片扩容机制

笔记  Go 

go切片扩容机制:当len > cap的时候,就会触发扩容如果预期的新容量超过原来老容量的两倍,就直接采用预期的新容量。如果老容量小于256, 如果预期的新容量小于原来老容量的两倍,就用老容量的两倍作为新容量如果老容量已经大于等于256,那么新容量就是5/4 * 老容量 + 192,持续这样处

Go 泛型

笔记  Go 

求切片长度package mainimport "fmt"func Length[T any](s []T) int {return len(s)}func main() {s := []int{1, 2, 3, 4, 5}fmt.Println(Length[int](s))s