随笔分类 - Go每日一库
摘要:# 背景 `net/http`包默认支持`http2`的,而`HTTP/2`强制使用`TLS`的,所以在使用的时候必须指定证书,正好最近玩过,在这写一下: 原本实现一个http服务的代码: ```go http.HandleFunc("/", func(w http.ResponseWriter,
阅读全文
摘要:## 写在前面 当你对GoLang AST感兴趣时,你会参考什么?文档还是源代码? 虽然阅读文档可以帮助你抽象地理解它,但你无法看到API之间的关系等等。 如果是阅读整个源代码,你会完全看懂,但你想看完整个代码我觉得您应该会很累。 因此,本着高效学习的原则,我写了此文,希望对您能有所帮助。 让我们轻
阅读全文
摘要: 今天跟大家介绍一款实时可视化 Go 程序运行时数据统计的工具 [statsviz](https://github.com/arl/statsviz)。 它
阅读全文
摘要:## 背景 gzip是当前应用非常广泛的文件压缩格式,golang 中也有内置的compress/gzip对其提供原生支持。今天我们要介绍的pgzip是一款完全兼容 gzip 的插件,并能提供相较于compress/gzip上百倍的性能提升! ## **pgzip 简介** pgzip([https
阅读全文
摘要:# 前言 gofmt 是 golang 自带的代码自动格式化工具,是保证 Go 代码风格一致的大杀器。我们这次要推荐的 **gofumpt 在 gofmt 的基础上添加了一系列更加严格的格式化规则,并保证了对 gofmt 的兼容**。 gofumpt 有助于进一步提升代码质量,它已经成为 gopls
阅读全文
摘要:当业务要处理大量的定时任务时,如果每个任务都创建一个Golang原生的timer的话,会占用较多的cpu资源,这类场景,可以用时间轮算法优化timer的资源消耗。本次介绍一款多级时间轮库antlabs/timer(以下timer特指antlabs/timer库),处理类似场景的优化。 ## **功能
阅读全文
摘要:在日常开发中,测试是不可避免的,在针对DAO层的代码写测试用例的时候,直接将依赖的存储服务(比如mongodb)的client给mock掉,可能达不到检验代码中语法或数据操作正确性的目的。如果在本地起一个相关的存储服务又会由于不同的项目带来环境的污染,并且测试代码由于依赖本地环境可能导致多人协作困难
阅读全文
摘要:在开发中,有时会遇到对图片的处理需求,在 Python中, PIL/Pillow 库非常强大和易用。 而 Golang 语言中,处理图片的标准库 image也可以实现一些基本操作。 image 库支持常见的 PNG、JPEG、GIF 等格式的图片处理, 可以对图片进行读取、裁剪、绘制、生成等操作。
阅读全文
摘要:# 背景 goroutine 作为 golang 并发实现的核心组成部分,非常容易上手使用,但却很难驾驭得好。我们经常会遭遇各种形式的 goroutine 泄漏,这些泄漏的 goroutine 会一直存活直到进程终结。它们的占用的栈内存一直无法释放、关联的堆内存也不能被 GC 清理,系统的可用内存会
阅读全文
摘要:# 什么是netlink? netlink 是 Linux 系统里用户态程序、内核模块之间的一种 IPC 方式,特别是用户态程序和内核模块之间的 IPC 通信。比如在 Linux 终端里常用的 ip 命令,就是使用 netlink 去跟内核进行通信的。例如想在golang代码中实现ip link a
阅读全文
摘要:## gopacket是什么? gopacket是google出品的golang三方库,质量还是靠的住,项目地址为:[github.com/google/gopacket](https://github.com/google/gopacket) gopacket到底是什么呢?是个抓取网络数据包的库,
阅读全文
摘要:# 什么是 pb? pb是一个Go语言的终端进度条库。 # 什么时候需要pb? 终端显示的工具进行定时等待、IO传输等操作时,都可以用pb来显示当前进度。 # pb入门 ## 安装pb ```bash go get github.com/cheggaaa/pb/v3 ``` ## 快速上手 ```g
阅读全文
摘要:## 简介 纯文本差异对比在许多场景下都有应用,如语音识别技术对识别率的评估,需要将识别后的文本与预期文本之间做差异对比计算;又如我们使用 Git 进行代码提交时,通常会使用git diff来查看这次编辑发生了哪些改动。 这里我们先简单定义一下差异 diff:是指目标文本和源文本之间的区别,也就是将
阅读全文
摘要:## 推荐 go-fuzz 的背景 我们在日常开发中经常会编写测试和对应的测试用例,大家是否常常会有以下疑惑: - 现有的测试用例是否完全覆盖了各种边界场景?会不会有意料之外的 case? - 代码测试覆盖率都达到 100% 了,代码上线时为啥还会战战兢兢? - 写测试用例太费心费力了,有没有一款能
阅读全文
摘要:在微服务架构中,通常会有很多的小服务,小服务之间存在大量 RPC 调用,但时常因为网络抖动等原因,造成请求失败,这时候使用重试机制可以提高请求的最终成功率,减少故障影响,让系统运行更稳定。[retry-go](https://github.com/avast/retry-go) 是一个功能比较完善的
阅读全文
摘要:# 什么是Asynq [Asynq](https://github.com/hibiken/asynq)是一个go语言实现的分布式任务队列和异步处理库,基于redis,类似sidekiq和celery,他具有以下特点: - 保证至少执行一次任务 - 持久化 - 失败重试 - worker崩溃自动恢复
阅读全文
摘要:# 简介 很多时候,我们获取了用户ip,但是想知道更多信息,怎么办?使用[ip2location](https://github.com/ip2location/ip2location-go)吧。 这个库,可以从IP地址快速查找国家,地区,城市,纬度,经度,邮政编码,时区,ISP,域名,连接类型,I
阅读全文
摘要:## 前言 毫无疑问,目前后台开发接口协议应用最广泛的除了HTTP之外就是gRPC了,HTTP接口有成熟的swagger工具可以生成界面美观和使用友好的文档,那么对于gRPC呢? 所以通过 .proto 文件能否生成更易阅读的 HTML 接口文档? ## protoc-gen-doc [**prot
阅读全文
摘要:[go-stash](https://github.com/kevwan/go-stash)是一个高效的从Kafka获取,根据配置的规则进行处理,然后发送到ElasticSearch集群的工具。 go-stash有大概logstash 5倍的吞吐性能,并且部署简单,一个可执行文件即可。 > go-s
阅读全文
摘要:[elastic](https://github.com/olivere/elastic)是go语言中与ElasticSearch交互使用最多的一个库。 首先要根据ElasticSearch版本选择对应的库: | **Elasticsearch version** | **Elastic versi
阅读全文

浙公网安备 33010602011771号