用 Go 实现一个 LRU cache 前言早在几年前写过关于 LRU cache 的文章:https://crossoverjie.top/2018/04/07/algorithm/LRU-cache/ 当时是用 Java 实现的,最近我在完善 ptg 时正好需要一个最近最少使用的数据结构来存储历史记录。 ptg: Performance testing tool (Go), 用 Go 实现的 gRPC 客户端调试工具。 Go 2021-12-20 Go #LRU cache
撸了一个可调试 gRPC 的 GUI 客户端 前言平时大家写完 gRPC 接口后是如何测试的?往往有以下几个方法: 写单测代码,自己模拟客户端测试。 可以搭一个 gRPC-Gateway 服务,这样就可以在 postman 中进行模拟。 2021-11-28 Go #grpc
编写一个接口压测工具 前言前段时间有个项目即将上线,需要对其中的核心接口进行压测;由于我们的接口是 gRPC 协议,找了一圈发现压测工具并不像 HTTP 那么多。 最终发现了 ghz 这个工具,功能也非常齐全。 事后我在想为啥做 gRPC 压测的工具这么少,是有什么难点嘛?为了验证这个问题于是我准备自己写一个工具。 2021-11-15 Go > 设计模式 #grpc #http #benchmark #performance #设计模式
Go 日常开发常备第三方库和工具 不知不觉写 Go 已经快一年了,上线了大大小小好几个项目;心态也经历了几轮变化。 因为我个人大概前五年时间写的是 Java ,中途写过一年多的 Python,所以刚接触到 Go 时的感觉如下图: 既没有 Java 的生态,也没有 Python 这么多语法糖。 2021-11-02 Go #gomonkey #zerolog
Go 里的超时控制 前言日常开发中我们大概率会遇到超时控制的场景,比如一个批量耗时任务、网络请求等;一个良好的超时控制可以有效的避免一些问题(比如 goroutine 泄露、资源不释放等)。 2021-10-28 Go #timer
观察者模式的实际应用 前言设计模式不管是在面试还是工作中都会遇到,但我经常碰到小伙伴抱怨实际工作中自己应用设计模式的机会非常小。 正好最近工作中遇到一个用观察者模式解决问题的场景,和大家一起分享。 2021-09-02 Go > 设计模式 #设计模式 #observer
切片 slice 原理分析 前言作为一个 Go 语言新手,看到一切”诡异“的代码都会感到好奇;比如我最近看到的几个方法;伪代码如下: 1234567891011func FindA() ([]*T,error) {}func FindB() ([]T,error) {}func SaveA(data *[]T) error {}func SaveB(data *[ 2021-07-28 Go #Go #切片 #数组 #slice
Go channel VS Java BlockingQueue 前言最近在实现两个需求,由于两者之间并没有依赖关系,所以想利用队列进行解耦;但在 Go 的标准库中并没有现成可用并且并发安全的数据结构;但 Go 提供了一个更加优雅的解决方案,那就是 channel。 channel 应用Go 与 Java 的一个很大的区别就是并发模型不同,Go 采用的是 CSP(Communicating sequential processes) 模型;用 Go 官方的说法 2021-07-02 Go #Java #Go #channel #BlockingQueue
Python 中的 os.popen 函数 与 Pipe 管道的坑 前言最近用 Python 写了几个简单的脚本来处理一些数据,因为只是简单功能所以我就直接使用 print 来打印日志。 任务运行时偶尔会出现一些异常: 2021-05-12 cs #Python #pipe #fd
Pulsar 入门及介绍 背景我们最近在做新业务的技术选型,其中涉及到了对消息中间件的选择;结合我们的实际情况希望它能满足以下几个要求: 友好的云原生支持:因为现在的主力语言是 Go,同时在运维上能够足够简单。 官方支持多种语言的 SDK:还有一些 Python、Java 相关的代码需要维护。 最好是有一些方便好用的特性,比如:延时消息、死信队列、多租户等。 2021-04-18 Pulsar #Go #Pulsar #消息队列