前言 之前也了解到过一致性哈希算法,但是没有用go实现过,刚好最近看GeeCache,动手实现下一致性哈希算法 正文: 我们先来想下一致性哈希算法的数据结构含有哪些内容: 1.map 用来存储虚拟节点对应的真实节点,是一个映射表 2.hash 哈希函数 3.key 哈希环,存储所有虚拟节点 4.replicas 虚拟节点的倍数 了解过一致性哈希算法的朋友,应该是能够理解为什么要有上面的内容,下面我们用代码实现下: type Hash func([]byte) uint32 type Map …
前言 之前也了解到过一致性哈希算法,但是没有用go实现过,刚好最近看GeeCache,动手实现下一致性哈希算法 正文: 我们先来想下一致性哈希算法的数据结构含有哪些内容: 1.map 用来存储虚拟节点对应的真实节点,是一个映射表 2.hash 哈希函数 3.key 哈希环,存储所有虚拟节点 4.replicas 虚拟节点的倍数 了解过一致性哈希算法的朋友,应该是能够理解为什么要有上面的内容,下面我们用代码实现下: type Hash func([]byte) uint32 type Map …
为什么要使用 easyjson 包: 因为解析json原生包用的是反射所以性能较差, 用 easyjson 比原生json包快好几倍 安装: cmd 输入下载代码 go get -u github.com/mailru/easyjson/ 坑(我的golang版本 go1.16.7 windows/amd64): 官方说下载库后 GOPATH 路径下的bin文件里会有个 easyjson.exe 文件, 结果我没有(但有 easyjson 库文件) 解决: cmd cd 到 easyjs…
你必须非常努力,才能看起来毫不费力! 微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero ! 前言 日常 Go 开发中,Context 包是用的最多的一个了,几乎所有函数的第一个参数都是 ctx,那么我们为什么要传递 Context 呢,Context 又有哪些用法,底层实现是如何呢?相信你也一定会有探索的欲望,那么就跟着本篇文章,一起来学习吧! 需求一 开发中肯定会调用别的函数,比如 A 调用 B,在调用过程中经常会设置超时时间,比如超过2s 就不等待 B 的结果了,直接返回,那么我…
今天这篇笔记重点讲goroutine 首先怎么定义goroutine 很简单,在方法前面加上go就可以了 func main() { go sayHello() } func sayHello() { fmt.Println("hello") } 也可以直接这样写, 基于匿名函数 go func() { fmt.Println("hello") }() go 语言至少有一个main goroutine, 另外调用的sayhello goroutine和main gorouti…
今天这篇笔记我们来学习锁:互斥锁(Mutex) 和 读写锁(RWMutex) 互斥锁(Mutex) 首先我们来看一段代码,没有加锁的情况下,两个goroutine同时修改一个变量,会发生什么 func main() { var count int increment := func() { count++ fmt.Printf(" Incrementing: %d \n", count) } decrement := func() { count-- fmt.Printf(" Decr…
用GoRoutines高性能同时进行多个Api调用 转载请注明来源:https://janrs.com/2023/03/用goroutines同时进行多个api调用/ Golang是高效的,非常高效。这种效率在很大程度上要归功于它在处理并发性问题时的独特抽象。例如,Java将其线程映射为操作系统线程,而Go使用自己的goroutines调度器将其轻量级goroutines从操作系统线程中进一步抽象出来。简而言之,Golang在使用操作系统线程方面非常节俭;如果一个goroutine被阻塞了,Go的调度器会在它的位置…
golang复合数据类型 目录 复合数据类型 数组 slice 复合数据类型 数组 长度固定,有零个或者多个元素组成。 默认情况下,数组的每个元素都被初始化为元素类型零值。 如果数组的长度位置出现...,则表示数组长度是根据初始值的个数来计算。如:q := [...]int{1, 2, 3} 如果指定索引和对应值列表的方式初始化,这种情形下初始化索引的顺序是无关紧要的,而且没有用到的索引可以省略,未指定初始值的元素将使用零值初始化。如:r := [...]int{99: -1} 定义了一个含有100个元素的数组。 …
Golang实现set 背景 Golang语言本身未实现set,但是实现了map golang的map是一种无序的键值对的集合,其中键是唯一的 而set是键的不重复的集合,因此可以用map来实现set Empty 由于map是key-value集合,如果使用map来实现set,则不需要关注value的具体类型和值 struct{}是具有零个元素的struct,struct{}的大小为0,不占用空间,因此十分适合作为value使用 type Empty struct{} Int64HashSet Golang是静态强…
go,websocket,聊天室 源码地址 https://gitee.com/bin-0821/chat-room-demo-go-websocket 关于websocket,上一篇文章讲述了如何通过websocket进行服务端与客户端的通信,本篇将会带领大家把各个websocket进行相互通信,在开始之前,请确保有理解 1 go的通道 2 go的线程 3 gin基础 事实上,websocket与websocket之间是无法进行直接相互通信的,需要我们将数据接收后,发送给另一个websocket链接,可以理解为 …
> 原文连接:[https://www.zhoubotong.site/post/67.html](https://www.zhoubotong.site/post/67.html) Go 标准库的net/url包提供的两个函可以直接检查URL合法性,不需要手动去正则匹配校验。 下面可以直接使用ParseRequestURI()函数解析URL,当然这个只会验证url格式,至于域名是否存在或注册,不会检查的,举个例子: package main import ( "fmt" "net/u…