使用FuncOption来初始化对象

Golang语言层面上没有可以为一个变量初始化值的方法,但是在Golang中可以使用另一种方法Func Option,这使得我们可以初始化对象的默认值,并可以优雅的修改

Protobuf语法

Protobuf是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化,很适合做数据存储或RPC数据交换协议。它可以用户通讯协议,数据存储等领域的语言无关平台无关可扩展的序列化结构数据格式,pb属于二进制协议,传输速度快,更容易解析

Golang实现Snowflake算法

SnowFlake算法是Twitter设计的一个可以在分布式系统中生成唯一的ID的算法,它可以满足Twitter每秒上万条消息ID分配的请求,这些消息ID是唯一的且有大致的递增顺序。

Go 并发模型介绍

Go中高效的并发得益于GPM这个并发模型使用Goroutinue并发的运行多个任务

Redis

redis事务

Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis的最小执行单元,一个事务中的命令要么都执行,要么都不执行。

使用MUUTI开始一个事务,然后把所有要在同一个事务中执行的命令都发送给 Redis后,我们使用EXEC命令告诉Redis将等待执行的事务队列中的所有命令(开始事务后,每一台输入命令都返回QUEUED的命令)按照发送顺序依次执行。命令在执行EXEC后才依次执行。
Redis保证一个事务中的所有命令要么都执行要么都不执行。如果在发送EXEC命令前客户端短线,则Redis会清空事务队列,事务中的命令都不会执行。
Redis事务保证在一个事务内的命令依次执行的过程中而不被其他命令插入

Http如何保证数据可靠及HTTP2的简单介绍

HTTP 的 Keep-Alive模式

当使用普通模式时,即非KeepAlive模式时,每个请求/应答都需要新建一个连接,数据传输完成后立即断开连接;当使用Keep-Alive模式时,这个模式时客户端和服务端的连接是在数据传输完成后是不中断的,当后续又有请求时,可以复用连接

如何判断请求所得到的响应数据已经接受完成 - 使用消息首部字段Conent-Length
表示实体内容长度,客户端可以根据这个值来判断数据是否接受完成 - 使用消息首部字段Transfer-Encoding
在传输一些动态页面时,服务器是与现实不知道内容大小,这时就可以使用Transfer-Encoding: chunk模式来传输数据。即如果要一边生产数据,一边发送数据给请求端,就要使用Transfer-Encoding:chunked这样的方式来代替Conteng-Length。chunk编码将数据分为一块一块的发生。Chunked编码将使用若干个Chunk串连而成,由一个标明长度为0的chunk标识结束。

Golang的interface的原理

iface 和 eface 都是 Go 中描述接口的底层结构体,区别在于 iface 描述的接口包含方法,而 eface 则是不包含任何方法的空接口:interface{}

Golang的sync包的几个常用的功能

学习下sync包的几个常用的包的使用和使用方法

Go语言中的单例模式

比较golang实现的几种单例模式的写法的优缺点

golang sql连接池由于设置空间连接比较少最大连接数太多导致的Time Wait

在golang sql连接请求的时候,遇到了大量time wait的情况,导致服务不可用,最后排查是因为空闲连接数太少的缘故,这篇主要来分析下sql 连接池的建立和释放的过程