bitset

Posted by 夏泽民

https://github.com/willf/bitset 状态标志中元素个数通常是固定的。而一般的集合中,元素个数通常是动态变化的。这会导致什么问题? 一般,我们使用一个整数就足以表示状态标志中的所有状态,最大的 int64 类型,足足有 64 个二进制位,最多可以包含 64 个元素,完全足够使用。但如果是集合,元素数量和值通常都不固定。 比如一个 bitset 集合最初可能只包含 1、2、4 几个元素,只要一个 int64 就能表示。



automaxprocs

Posted by 夏泽民

GC停顿经常超过100ms 现象 有同事反馈说, 最近开始试用公司的k8s, 部署在docker里的go进程有问题, 接口耗时很长, 而且还有超时. 逻辑很简单, 只是调用了kv存储, kv存储一般响应时间<5ms, 而且量很少, 小于40qps, 该容器分配了0.5个核的配额, 日常运行CPU不足0.1个核. GC停顿经常超过100ms 现象 有同事反馈说, 最近开始试用公司的k8s, 部署在docker里的go进程有问题, 接口耗时很长, 而且还有超时. 逻辑很简单, 只是调用了kv存储, kv存储一般响应时间<5ms, 而且量很少, 小于40qps, 该容器分配了0.5个核的配额, 日常运行CPU不足0.1个核.



Token

Posted by 夏泽民

编译型语言(比如 Go)的源码要经过编译和链接才能转化为计算机可以执行的程序,这个过程的第一步就是词法分析。 什么是词法分析呢? 它就是将源代码转化为一个个预先定义的 token 的过程。为了便于理解,我们将其分为两个阶段进行介绍。 第一阶段,对源码串进行扫描,按预先定义的 token 规则进行匹配并切分为一个个有语法含义、最小单元的字符串,即词素(lexme),并在此基础上将其划归为某一类 token。这个阶段,一些字符可能会被过滤掉,比如,空白符、注释等。 第二阶段,通过评估器 Evaluator 评估扫描出来的词素,并确定它字面值,生成最终的 Token。 一个简单的示例 先看一段代码,经典的 hello world,如下: package main



Go实现简单TCP扫描器

Posted by 夏泽民

TCP是比我们介绍的要复杂的多,但是我们只介绍一点基础知识。TCP的握手有三个过程。首先,客户端发送一个 syn 的包,表示建立回话的开始。如果客户端收到超时,说明端口可能在防火墙后面, 第二,如果服务端应答 syn-ack 包,意味着这个端口是打开的,否则会返回 rst 包。最后,客户端需要另外发送一个 ack 包。从这时起,连接就已经建立。 我们TCP扫描器第一步先实现单个端口的测试。使用标准库中的 net.Dial 函数,该函数接收两个参数:协议和测试地址(带端口号)。



Staticcheck

Posted by 夏泽民

https://github.com/dominikh/go-tools oo often we discover subtle bugs only after deploying to production. Even in a language like Go it’s possible to write ineffectual code and not catch bugs until it’s too late.



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required