GO
文章平均质量分 88
Hzy_han
bug不会凭空产生,也不会凭空消失,只是从一个地方转移到了另一个地方。
展开
-
布谷鸟过滤器
缓存穿透缓存穿透是指请求了缓存和数据库中都没有的数据,频繁请求这类数据,那么数据库就要频繁响应这种不必要的查询,会导致数据库压力过大。那么如何将这些请求阻挡在外呢?主要有两个思路:1.从缓存和数据库中都取不到得数据,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如两分钟2.使用过滤器布隆过滤器布隆过滤器(Bloom Filter)大概的思路就是,当你请求的信息来的时候,先检查一下你查询的数据我这有没有,有的话将请求压给数据库,没有的话直接返回,是如何做到的呢?原创 2021-09-18 17:09:15 · 815 阅读 · 0 评论 -
go本地缓存bigcache
缓存算法是指令的一个明细表,用于决定缓存系统中哪些数据应该被删去。常见类型包括LFU、LRU、ARC、FIFO、LFU(Least Frequently Used ,最不经常使用算法):这个缓存算法使用一个计数器来记录条目被访问的频率。通过使用LFU缓存算法,最低访问数的条目首先被移除。这个方法并不经常使用,因为它无法对一个拥有最初高访问率之后长时间没有被访问的条目缓存负责。LRU (Least recently used,最近最少使用算法)是一种常用的淘汰算法,选择最近最久未使用的数据予以淘汰。原创 2021-08-17 16:41:34 · 2813 阅读 · 0 评论 -
令牌桶算法实现限流
试想这样的场景, 尽管服务器的 QPS 已经达到限速阈值了, 但是并不想将所有的流量都拒之门外, 仍然让部分流量能够正常通过限流器. 这样我们的服务器在面对突发流量时能够有一定的伸缩空间, 而不是一直处于不可用状态。在开发高并发的系统时,有很多手段来保护系统,如缓存、降级和限流等。缓存可以提升系统的访问速度,降级可以暂时屏蔽掉非核心业务,使得核心业务不受影响。限流的目的通过对并发访问进行限速,一旦达到一定的速率就可以拒绝服务(定向到错误页或告知资源没有了)、排队等待(如秒杀、评论、下单等)、降级(直接返回原创 2021-05-19 19:19:04 · 4894 阅读 · 2 评论 -
Go中的命名规范
1.命名规范1.1 Go是一门区分大小写的语言。命名规则涉及变量、常量、全局函数、结构、接口、方法等的命名。 Go语言从语法层面进行了以下限定:任何需要对外暴露的名字必须以大写字母开头,不需要对外暴露的则应该以小写字母开头。当命名(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Analysize,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);命名如果以小写字母开头,则对包外是不可见的,但转载 2021-03-26 16:30:44 · 1112 阅读 · 0 评论 -
Go为什么天生支持高并发
goroutine+channel原创 2021-02-14 10:59:48 · 5257 阅读 · 2 评论 -
python、go和java中的垃圾回收机制
常见的 GC 算法。分别是:引用计数法、Mark-Sweep法、三色标记法、分代收集法。引用计数标记-清除分代回收Go三色标记法(1.5版本之后)三色标记法是传统 Mark-Sweep (标记清除法)的一个改进,它是一个并发的 GC 算法。首先创建三个集合:白、灰、黑。将所有对象放入白色集合中。然后从根节点开始遍历所有对象(注意这里并不递归遍历),把遍历到的对象从白色集合放入灰色集合。之后遍历灰色集合,将灰色对象引用的对象从白色集合放入灰色集合,之后将此灰色对象放入黑色集合重复 4 直原创 2020-07-29 22:26:02 · 1191 阅读 · 0 评论 -
python和golang的对比
特点1.Python①解释型语言 程序不需要在运行前编译,在运行程序的时候才翻译,专门的解释器负责在每个语句执行的时候解释程序代码。这样解释型语言每执行一次就要翻译一次,运行效率相对较低。②动态数据类型 支持重载运算符,也支持泛型设计。(运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。泛型设计就是定义的时候不需要指定类型,在客户端使用的时候再去指...原创 2020-03-14 12:35:01 · 1425 阅读 · 0 评论 -
Go语言中的Tag语法
Tag可以用来增强结构体的定义,Tag会带上一些meta信息,在本文中将通过几个例子来深入了解Tag的用法。标签有时候会在结构struct字段定义后面带上一个字符串(tag)。类似于如下type T struct { f1 string "f one" f2 string f3 string `f three` f4, f5 i...原创 2020-01-17 22:40:41 · 2256 阅读 · 0 评论 -
go和python中的鸭子类型--Duck Typing
鸭子类型(duck typing):是动态类型的一种风格,不管对象属于哪个,也不管声明的具体接口是什么,只要对象实现了相应的方法,函数就可以在对象上执行操作.即忽略对象的真正类型,转而关注对象有没有实现所需的方法、签名和语义.图片中的大黄鸭,它是不是一只鸭子呢?这个问题,得看你从哪个角度去看,如果从人们常识的认知中的角度去看,它显然不是一只鸭子,因为它连最基本的生命都没有。但是从 Duc...原创 2020-01-09 09:51:09 · 701 阅读 · 0 评论 -
go语言中数据类型
整型整型数据分为两类,有符号和无符号两种类型有符号: int, int8, int16, int32, int64无符号: uint, uint8, uint16, uint32, uint64, byte(byte与uint8类似,一般用来存储单个字符)fmt.Printf("%T", var_name) //输出变量类型unsafe.Sizeof(var_name) //...原创 2019-12-30 21:50:36 · 277 阅读 · 0 评论 -
go语言中指针详解
指针在Go语言中几个特点:(1)类型指针,允许对这个指针类型的数据进行修改,传递数据可以直接使用指针,而无须拷贝数据,类型指针不能进行偏移和运算。(2)切片,由指向起始元素的原始指针、元素数量和容量组成。(3)每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。Go语言中使用在变量名前面添加&操作符(前缀)来获取变量的内存地址(取地址操作),格式如下:ptr := &a...原创 2019-12-23 22:03:02 · 785 阅读 · 0 评论 -
go语言中go.mod文件有什么用
使用go mod 管理项目,就不需要非得把项目放到GOPATH指定目录下,你可以在你磁盘的任何位置新建一个项目,包含go.mod文件的目录也被称为模块根,也就是说,go.mod 文件的出现定义了它所在的目录为一个模块。...原创 2019-12-22 21:01:28 · 4796 阅读 · 1 评论