![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础
文章平均质量分 50
SSSTing_
这个作者很懒,什么都没留下…
展开
-
Go 语言源码分析——channel
Go 语言最常提及的设计模式就是:不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存。许多主流编程语言中,多个线程传递数据defangshi原创 2021-06-13 13:03:04 · 245 阅读 · 0 评论 -
Go 语言源码分析——slice 切片
Go的slice与数组类似,能够通过下标进行访问,越界访问时会报错。但slice比数组更加灵活,数组的大小是固定的,而slice可进行自动扩容。一、数据结构type slice struct { array unsafe.Pointer len int cap int}可以看到,slice底层包含了一个指向数组的指针,以及slice的长度和容量,可通过len()和cap()获取二、源码分析1. makeSlice首先看创建一个slicepackage m..原创 2021-04-28 22:41:00 · 164 阅读 · 0 评论 -
Go 字符串——遍历及切片
一、遍历go的遍历有以下两种方式,但是直接打印输出的为数字,与我们想要的结果不同。这是因为在Go里,字符串存储的是类型为byte的字节切片,而byte实际为uint8类型的值,即存储一个字符串时,存储的不是字符,而是字符对应的字节。那为什么两种遍历输出的数值不一样呢,接着往下看。func main() { str := "hello, 世界" fmt.Println("test 1-------") for i := 0; i < len(str); i++ { fmt.P原创 2021-04-17 19:44:57 · 1728 阅读 · 0 评论 -
Go 防缓存击穿 —— singleflight
缓存击穿:缓存在某个时间点过期时,突然在这个时间点出现对这个key的大量并发请求,此时缓存已过期,请求会直接落在DB上,使得DB瞬间请求量增大,压力骤增。singleflight能够在同一时间有大量针对同一key的请求这种情况,只让一个请求执行去获取数据,而其他协程阻塞等待结果的返回一、数据结构type Group struct { mu sync.Mutex // 互斥锁 m map[string]*call // 对于每一个要获取的key有一个对应的call}ty..原创 2021-04-17 16:10:04 · 207 阅读 · 0 评论 -
Go 标准库源码分析 - sync 的 WaitGroup
WaitGroup常用于多个goroutine协作,主要功能是阻塞等待一组goroutine完成。一、数据结构type WaitGroup struct { noCopy noCopy state1 [3]uint32 // 用于存放任务计数器、等待者计数器和信号量}WaitGroup采用64位的值来保存计数器,其中高32位为任务计数器,低32位为等待者计数器,另外用32位的值保存信号量。WaitGroup在使用时需要64位的计数器进行原子操作,这要求计数器的地址是6...原创 2021-03-23 23:32:58 · 92 阅读 · 0 评论 -
HTTP协议入门
一、 简介1. HTTP(HyperText Transfer Protocol)是Web的应用层协议,是Web的核心,由两个程序——服务器程序和客户程序实现。 HTTP定义了Web客户向Web服务器发送请求Web页面的方式,以及服务器向客户传送Web页面的方式。 HTTP运行在TCP上,由HTTP客户发起一个与服务器的TCP连接,一旦连接建立,该浏览器和服务器进程可通过套接字接口访问...原创 2019-06-09 17:30:34 · 84 阅读 · 0 评论 -
排序算法比较与总结
一、插入排序1. 核心思想共进行 N - 1 趟排序,对于 P = 1 到 P = N - 1 趟,保证从位置0到位置P上的元素为排序状态。在第P趟,将位置P上的元素移动到前P + 1个元素的正确位置上,比其更大的元素都向右移动一个位置。(图片链接:http://www.goyth.com/2018/02/08/straightInsertionSort/)2. 分析如果输入...原创 2019-10-10 15:56:58 · 128 阅读 · 0 评论