go-gprc gprc go

Go每日一库之128:podinfo(k8s微服务模板)

## 项目介绍 官方 Github: [Podinfo](https://github.com/stefanprodan/podinfo) Podinfo 是一个用 Go 制作的小型 web 应用程序,它展示了在 Kubernetes 中运行微服务的最佳实践。 它已实现的技术指标(截选自官方 [RE ......
模板 podinfo 128 k8s k8

Go每日一库之133:lo(基于泛型的 Golang lodash 库)

近日,Go 核心开发团队终于宣布了 Go 1.18 正式版本的发布!这是一个大家期待很久的版本!Go 1.18 包含大量新功能:模糊测试、性能改进、工作区等,以及 Go 语言开源以来最大的一次语法特性变更 —— 支持泛型! 支持泛型后,我们便不再需要写如下冗余的代码: ![每日一库之133:lo(基 ......
Golang lodash 133

Go每日一库之109:go-stash

[go-stash](https://github.com/kevwan/go-stash)是一个高效的从Kafka获取,根据配置的规则进行处理,然后发送到ElasticSearch集群的工具。 go-stash有大概logstash 5倍的吞吐性能,并且部署简单,一个可执行文件即可。 > go-s ......
go-stash stash 109 go

Go每日一库之113:retry-go

在微服务架构中,通常会有很多的小服务,小服务之间存在大量 RPC 调用,但时常因为网络抖动等原因,造成请求失败,这时候使用重试机制可以提高请求的最终成功率,减少故障影响,让系统运行更稳定。[retry-go](https://github.com/avast/retry-go) 是一个功能比较完善的 ......
retry-go retry 113 go

Go每日一库之114:go-fuzz

## 推荐 go-fuzz 的背景 我们在日常开发中经常会编写测试和对应的测试用例,大家是否常常会有以下疑惑: - 现有的测试用例是否完全覆盖了各种边界场景?会不会有意料之外的 case? - 代码测试覆盖率都达到 100% 了,代码上线时为啥还会战战兢兢? - 写测试用例太费心费力了,有没有一款能 ......
go-fuzz fuzz 114 go

Go每日一库之115:go-diff

## 简介 纯文本差异对比在许多场景下都有应用,如语音识别技术对识别率的评估,需要将识别后的文本与预期文本之间做差异对比计算;又如我们使用 Git 进行代码提交时,通常会使用git diff来查看这次编辑发生了哪些改动。 这里我们先简单定义一下差异 diff:是指目标文本和源文本之间的区别,也就是将 ......
go-diff diff 115 go

Go每日一库之96:phantomjs

## 1. 什么是Phantomjs [PhantomJS](https://phantomjs.org/)是一个基于webkit的JavaScript API。它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何您可以在基于webkit浏览器做 ......
phantomjs

Go每日一库之97:chromedp

## chromedp是什么? [chromedp](https://github.com/chromedp/chromedp)是一个更快、更简单的Golang库用于调用支持Chrome DevTools协议的浏览器,同时不需要额外的依赖(例如Selenium和PhantomJS) > Chrome ......
chromedp

Go每日一库之108:elastic

[elastic](https://github.com/olivere/elastic)是go语言中与ElasticSearch交互使用最多的一个库。 首先要根据ElasticSearch版本选择对应的库: | **Elasticsearch version** | **Elastic versi ......
elastic 108

Go每日一库之112:asynq

# 什么是Asynq [Asynq](https://github.com/hibiken/asynq)是一个go语言实现的分布式任务队列和异步处理库,基于redis,类似sidekiq和celery,他具有以下特点: - 保证至少执行一次任务 - 持久化 - 失败重试 - worker崩溃自动恢复 ......
asynq 112

Go每日一库之118:netlink(内核通信)

# 什么是netlink? netlink 是 Linux 系统里用户态程序、内核模块之间的一种 IPC 方式,特别是用户态程序和内核模块之间的 IPC 通信。比如在 Linux 终端里常用的 ip 命令,就是使用 netlink 去跟内核进行通信的。例如想在golang代码中实现ip link a ......
内核 netlink 118

Go每日一库之125:ast(抽象语法树)

## 写在前面 当你对GoLang AST感兴趣时,你会参考什么?文档还是源代码? 虽然阅读文档可以帮助你抽象地理解它,但你无法看到API之间的关系等等。 如果是阅读整个源代码,你会完全看懂,但你想看完整个代码我觉得您应该会很累。 因此,本着高效学习的原则,我写了此文,希望对您能有所帮助。 让我们轻 ......
语法 125 ast

Go每日一库之117:gopacket(网络数据抓包)

## gopacket是什么? gopacket是google出品的golang三方库,质量还是靠的住,项目地址为:[github.com/google/gopacket](https://github.com/google/gopacket) gopacket到底是什么呢?是个抓取网络数据包的库, ......
gopacket 数据 网络 117

Go每日一库之119:goleak(goroutine 泄漏检测)

# 背景 goroutine 作为 golang 并发实现的核心组成部分,非常容易上手使用,但却很难驾驭得好。我们经常会遭遇各种形式的 goroutine 泄漏,这些泄漏的 goroutine 会一直存活直到进程终结。它们的占用的栈内存一直无法释放、关联的堆内存也不能被 GC 清理,系统的可用内存会 ......
goroutine goleak 119

Go每日一库之121:moby(操作docker容器)

在日常开发中,测试是不可避免的,在针对DAO层的代码写测试用例的时候,直接将依赖的存储服务(比如mongodb)的client给mock掉,可能达不到检验代码中语法或数据操作正确性的目的。如果在本地起一个相关的存储服务又会由于不同的项目带来环境的污染,并且测试代码由于依赖本地环境可能导致多人协作困难 ......
容器 docker moby 121

Go每日一库之120:image(标准库图形处理)

在开发中,有时会遇到对图片的处理需求,在 Python中, PIL/Pillow 库非常强大和易用。 而 Golang 语言中,处理图片的标准库 image也可以实现一些基本操作。 image 库支持常见的 PNG、JPEG、GIF 等格式的图片处理, 可以对图片进行读取、裁剪、绘制、生成等操作。 ......
图形处理 图形 标准 image 120

Go每日一库之122:gofumpt(增强代码格式化)

# 前言 gofmt 是 golang 自带的代码自动格式化工具,是保证 Go 代码风格一致的大杀器。我们这次要推荐的 **gofumpt 在 gofmt 的基础上添加了一系列更加严格的格式化规则,并保证了对 gofmt 的兼容**。 gofumpt 有助于进一步提升代码质量,它已经成为 gopls ......
gofumpt 代码 格式 122

Go每日一库之110:protoc-gen-doc

## 前言 毫无疑问,目前后台开发接口协议应用最广泛的除了HTTP之外就是gRPC了,HTTP接口有成熟的swagger工具可以生成界面美观和使用友好的文档,那么对于gRPC呢? 所以通过 .proto 文件能否生成更易阅读的 HTML 接口文档? ## protoc-gen-doc [**prot ......
protoc-gen-doc protoc 110 gen doc

Go每日一库之121:timer(时间轮算法定时器)

当业务要处理大量的定时任务时,如果每个任务都创建一个Golang原生的timer的话,会占用较多的cpu资源,这类场景,可以用时间轮算法优化timer的资源消耗。本次介绍一款多级时间轮库antlabs/timer(以下timer特指antlabs/timer库),处理类似场景的优化。 ## **功能 ......
定时器 算法 时间 timer 121

Go每日一库之123:pgzip(高性能gzip压缩)

## 背景 gzip是当前应用非常广泛的文件压缩格式,golang 中也有内置的compress/gzip对其提供原生支持。今天我们要介绍的pgzip是一款完全兼容 gzip 的插件,并能提供相较于compress/gzip上百倍的性能提升! ## **pgzip 简介** pgzip([https ......
高性能 pgzip gzip 123

Go每日一库之126:h2c(明文https)

# 背景 `net/http`包默认支持`http2`的,而`HTTP/2`强制使用`TLS`的,所以在使用的时候必须指定证书,正好最近玩过,在这写一下: 原本实现一个http服务的代码: ```go http.HandleFunc("/", func(w http.ResponseWriter, ......
明文 https 126 h2c h2

Go每日一库之111:ip2location

# 简介 很多时候,我们获取了用户ip,但是想知道更多信息,怎么办?使用[ip2location](https://github.com/ip2location/ip2location-go)吧。 这个库,可以从IP地址快速查找国家,地区,城市,纬度,经度,邮政编码,时区,ISP,域名,连接类型,I ......
ip2location 2location location 111 ip2

Go每日一库之103:jwt-go

JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。 ## 什么是JWT? JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现 ......
jwt-go 103 jwt go

Go每日一库之99:go-grpc-middleware

grpc的中间件以及中间件库有很多,[go-grpc-middleware](https://github.com/grpc-ecosystem/go-grpc-middleware)应该是其中应用最广泛,本文主要介绍其中的grpc_zap、grpc_auth和grpc_recovery中间件。 # ......
go-grpc-middleware middleware grpc go

Go每日一库之104:uber-go%2Fratelimit

限流又称为流量控制(流控),通常是指限制到达系统的并发请求数,常用的限流算法主要有`漏洞`和`令牌桶`。 ### 漏桶 漏桶法限流很好理解,假设我们有一个水桶按固定的速率向下方滴落一滴水,无论有多少请求,请求的速率有多大,都按照固定的速率流出,对应到系统中就是按照固定的速率处理请求。 ![每日一库之 ......
2Fratelimit Fratelimit uber-go uber 104

Go每日一库之102:go-wrk(HTTP基准测试)

[go-wrk](https://github.com/tsliwowicz/go-wrk) 是一个用Go语言实现的轻量级的http基准测试工具,类似于[wrk](https://github.com/wg/wrk)(还有ab、siege),本文将简单介绍一下如何使用go-wrk实现接口的性能(压力 ......
基准 go-wrk HTTP 102 wrk

Go每日一库之89:goreporter

## 概述 一个项目中除设计之外,代码质量是一个项目成功与健壮的基础,再好的设计但是实现代码混乱,风格混杂,明显性错误百出,我们仍然会认为这是一个失败的项目;相反,即使一个项目在架构和设计上无新奇之处,但代码实现质量高,例如风格统一,测试完善,接口明确,无冗余代码,实现中无明显错误或不安全用法,圈复 ......
goreporter

Go每日一库之91:gomock

## 1 gomock 简介 testing包里 介绍了 Go 语言中单元测试的常用方法,包括子测试(subtests)、表格驱动测试(table-driven tests)、帮助函数(helpers)、网络测试和基准测试(Benchmark)等。这篇文章介绍一种新的测试方法,mock/stub 测 ......
gomock

Go每日一库之92:context

## 1 为什么需要 Context WaitGroup 和信道(channel)是常见的 2 种并发控制的方式。 如果并发启动了多个子协程,需要等待所有的子协程完成任务,WaitGroup 非常适合于这类场景,例如下面的例子: ```go var wg sync.WaitGroup func do ......
context

Go每日一库之93:mmap

## 1 mmap 简介 > In computing, mmap is a POSIX-compliant Unix system call that maps files or devices into memory. It is a method of memory-mapped file I ......
mmap