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

Go slices库

笔记  Go 

Go 1.21新增的 slices 包提供了很多和切片相关的函数slices.BinarySearchpackage mainimport ("fmt""slices")func main() {nums := []int{1, 3, 5, 7, 9}// 查

Golang 设置P 逻辑单元的数量

笔记  Go 

Go语言的并发模型是基于GMP模型(Goroutine、Machnie、Processor)的,其中:Goroutine(G):Go中的轻量级线程,由Go运行时调度。Machine(M):操作系统线程,与硬件CPU核心相关联。Processor(P):调度器中的一个逻辑单元,负责调度Goroutin

Protobuf 的基本数据类型

笔记  Go 

proto(Protocol Buffers,简称 Protobuf)是 Google 开发的一种轻量级、高效的数据序列化格式,用于结构化数据的存储和传输。在 Protobuf 中,数据通过 .proto 文件定义,文件中包含消息类型(message types)和字段类型(field types)

Go语言单例模式实现线程安全

笔记  Go 

在 Go 语言中,单例模式的实现与线程安全(Go 中称为 协程安全 或 并发安全)可以通过多种方式实现。以下是几种常见的方法:1. 使用 sync.Once(推荐)sync.Once 是 Go 标准库中专门设计用来确保某个操作只执行一次的机制,非常适合实现单例模式。package singleton