http2与h2c

了解一下http2和h2c (HTTP/2 over TCP,HTTP/2 without TLS)。 http/1.1 的服务器 我们经常会在代码中启动一个http服务器,最简单的http/1.1服务器如下所示: 1 2

Protobuf的import功能

业务场景 我们会有这样的需求:在不同的文件夹中定义了不同的 proto 文件,这些不同的文件夹可能是一些不同的 gRPC 服务。因为不想重复定义某一个 message

GRPC如何支持HTTP

grpc基于HTTP/2 grpc的client和server通信是基于HTTP/2,client发出的消息是HTTP/2协议格式,serve

Go的文件系统抽象系统:Afero

概观 Afero 是一个文件系统框架,提供与任何文件系统的简单,统一和通用的交互 API。作为提供接口,类型和方法的抽象层,Afero 具有非常干净的接口和

Go的类型断言

编译时类型断言来检查接口 作为一个热身,来看一个在 Go 中熟知的编译期断言:接口满意度检查。 在这段代码中,var _ stringWriter = W{}行确保类型 W 是一个 st

依赖注入:Wire包介绍

wire是 Google 开源的一个依赖注入工具。它是一个代码生成器,并不是一个框架。我们只需要在一个特殊的go文件中告诉wire类型之间的依赖关系,它会

控制反转(IoC)与依赖注入(DI)

依赖倒置原则 要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Principle )。 什么是依赖倒置原则?

Golangci Lint配置介绍

介绍 要查看支持的Linter列表以及启用/禁用的Linter: 1 golangci-lint help linters 默认情况下启用Linter: govet -Vet检查Go源代码并报告可疑构造,例

Go代码审查建议

当前页面收集了在 Go 代码审核期间的常见意见,以便一个详细说明能被快速参考。这是一个常见错误的清单,而非综合性的风格指南。 你也可以将它作为是 Effective Go

Go编码建议

注释 可以通过 /……/ 或者 // ……增加注释, //之后应该加一个空格。 如果你想在每个文件中的头部加上注释,需要在版权注释和 Package前面加一个

TinyLFU缓存:ristretto

Overview Ristretto是一种快速的,固定大小的内存中高速缓存,同时关注吞吐量和命中率性能。您可以轻松地将Ristretto添加到现有系统,并将

序列化:vmihailenco-Msgpack

func Marshal 1 func Marshal(v interface{}) ([]byte, error) Marshal 返回v的MessagePack编码。 Example Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 type Item struct { Foo string } b, err := msgpack.Marshal(&Item{Foo: "bar"}) if err != nil { panic(err) } var item Item err = msgpack.Unmarshal(b, &item)

序列化:MessagePack介绍

介绍 MessagePack是一种高效的二进制序列化格式。它允许您像JSON一样在多个语言之间交换数据。但是,它更快并且更小。小整数被编码为一

Go Advice

Go-advice 中文版本 Go 箴言 Go 之禅 代码 并发 性能 模块 构建 测试 工具 Misc Go-advice 中文版本 Go 箴言 不要通过共享内存进行通信,通过通信共享内存 并发不是并行 通道编排;互斥体序

Uber的Go语言编码规范

Uber Go 语言编码规范 Uber 是一家美国硅谷的科技公司,也是 Go 语言的早期 adopter。其开源了很多 golang 项目,诸如被 Gopher 圈熟知的 zap、jaeger 等。20

缓存驱逐算法:W-TinyLFU

W-TinyLFU 我们有三种常见的缓存驱逐策略: FIFO:先进先出,在这种淘汰算法中,先进入缓存的会先被淘汰。这种可谓是最简单的了,但是会导致我们命中率很低

Bigcache优化技巧

设计BigCache的初衷 bigcache的作者也不是想当然的开发一个库,而且项目遇到了需求。需求如下: 支持http协议 支持 10K RPS (5k 写,5k 读

Go中如何实现高性能本地缓存

前言 在大部分业务系统中,都会使用诸如 Redis、Memcached 等远程缓存,一方面可以避免自身进程内存占用过大而导致的 OOM 或 GC 问题,另一方面