本文目录一览:
golang中crypto/hmac包
hmac包实现了U.S.Federal Infomation Processing Standards Publication 198规定的HMAC(加密哈希信息认证码)。
HMAC是使用key标记信息的加密hash。接收者使用相同的key逆运算来认证hash。
出于安全目的,接收者应使用Equal函数比较认证码:
这个包一共提供了两个对外公开的函数:
func Equal(mac1, mac2 []byte) bool
比较两个MAC是否相同,而不会泄露对比时间信息。(以规避时间侧信道攻击;指通过计算比较时花费的时间的长短来获取密码的信息,用于密码破解)
func New(h func() hash.Hash, key []byte) hash.Hash
New函数返回一个采用hash.Hash作为底层hash接口、key作为密钥的HMAC算法的hash接口。
【golang】海量数据去重-布隆过滤器
在做域名爆破中,遇到了把一个300G的子域名json文件进行去重,一开始是考虑使用字典进行去重,但是数据量大了,会造成内存泄露。看网上资料介绍了一种方案,就是使用布隆过滤器。
布隆过滤器是一种数据结构,概率型数据结构,特定是高效插入和查询,可以用来告诉你“某一值一定不存在或者kennel存在”。
相比于传统的map、set等数据结构,占用空间更少,但其返回结果是概率型的,不确定。
布隆过滤器内部维护一个bitArray(位数组),开始所有数据为0,当一个元素过来时,能过多个哈希函数(hash1、hash2、hash3)计算不同的hash值,并通过hash值找到bitArray的下标,将里面的值改为由0变为1。布隆过滤器有一个误判率,误判率越低,数组越长,所在空间越大,误判率越高,数组越小,所占空间越小。
这里贴上一个技术大牛的博客地址,里面对布隆过滤器用法以及在redis里面处理缓存穿透问题的详细介绍。
如何检测内存泄露 golang
c, _ := listerner.Accept()
go c.run()
func (c *conn) run() {
go c.onWrite()
c.onRead()
}
func (c *conn) onRead() {
stat.AddConnCount(1)
//on something
stat.AddConnCount(-1)
//clear
//notify onWrite to quit
}
go 中 限制 goroutine 数量以及使用协程池
Golang 开发需要协程池吗
goroutine 创建需要占用一定量的内存,开一个goroutine 只需要少量的内存空间,几KB,这也是golang能实现百万长链的原因.
但在实际中,goroutine 需要正确的关闭,而不是无限创建后,造成goroutine 泄露,进而引发系统崩溃
网友实现的方案:
使用:
有些第三方库实现了协程池,同样也可以达到限制协程数量的目的,比如: