representing zones time go

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

Go每日一库之94:protobuf

## 1 Protocol Buffers 简介 protobuf 即 Protocol Buffers,是一种轻便高效的结构化数据存储格式,与语言、平台无关,可扩展可序列化。protobuf 性能和效率大幅度优于 JSON、XML 等其他的结构化数据格式。protobuf 是以二进制方式存储的,占 ......
protobuf

Go每日一库之100:websocket

Go语言标准包里面没有提供对WebSocket的支持,但是在由官方维护的go.net子包中有对这个的支持,需要独立下载。 **Go websocket package 下载地址:** `http://code.google.com/p/go.net/websocket ` **Go get 命令下载 ......
websocket 100

Go每日一库之101:swagger

一份清晰明了的接口文档能够极大地提高前后端双方的沟通效率和开发效率。本文将介绍如何使用swagger生成接口文档。 # Swagger介绍 `Swagger`是全球最大的`OpenAPI`规范(OAS)API开发工具框架,支持从设计和文档到测试和部署的整个API生命周期的开发 `Swagger`是目 ......
swagger 101

Go每日一库之102:grpcurl

[grpcurl](https://github.com/fullstorydev/grpcurl)是一个命令行工具,使用它可以在命令行中访问gRPC服务,就像使用curl访问http服务一样。 ## 准备 **在gRPC服务中注册reflection服务:** gRPC服务是使用Protobuf( ......
grpcurl 102

Go每日一库之107:errors

> 目前实现最优雅,打印堆栈良好的错误包。 # 下载安装 `go get -x github.com/pkg/errors` # 主要函数 ```go // 新生成一个错误, 带堆栈信息 func New(message string) error //只附加新的信息 func WithMessag ......
errors 107

Go每日一库之106:hystrix(熔断)

## 背景 随着微服务的流行,服务之间的调用可能变得越来越复杂,一个业务流程可能需要调用五六个甚至更多服务,这就会导致,假设某个服务出现问题,严重可能出现服务器负载过高,导致服务雪崩的现象。 因此为了防止此现象的发生,就需要考虑服务熔断机制,根据自身业务的需求,将其应用到服务中。 `什么是熔断`:可 ......
hystrix 106

Go每日一库之105:juju%2Fratelimit

限流又称为流量控制(流控),通常是指限制到达系统的并发请求数,常用的限流算法主要有漏洞和令牌桶。 ### 令牌桶 令牌桶其实和漏桶的原理类似,令牌桶按固定的速率往桶里放入令牌,并且只要能从桶里取出令牌就能通过,令牌桶支持突发流量的快速处理。 ![每日一库之105:juju%2Fratelimit-0 ......
2Fratelimit Fratelimit juju 105

Go每日一库之69:resty

## 简介 [`resty`](https://github.com/go-resty/resty)是 Go 语言的一个 HTTP client 库。`resty`功能强大,特性丰富。它支持几乎所有的 HTTP 方法(GET/POST/PUT/DELETE/OPTION/HEAD/PATCH等),并 ......
resty

Go每日一库之70:termtables

## 简介 今天学个简单点的,[`termtables`](github.com/scylladb/termtables)处理表格形式数据的输出。适用于随时随地的输出一些状态或统计数据,便于观察和调试。是一个很小巧的工具库。我在学习[`dateparse`](https://go-quiz.gith ......
termtables

Go每日一库之85:freecache

# [freecache](https://github.com/coocood/freecache) ## 一句话描述 Go缓存库,具有零GC开销和高并发性能 ## 简介 ### freecache是什么? 使用FreeCache,您可以在内存中缓存无限数量的对象,而不会增加延迟和降低吞吐量。 # ......
freecache

Go每日一库之86:zerolog

## [zerolog](https://github.com/rs/zerolog) ## 什么是 Zerolog ? zerolog 包提供了一个专门用于 JSON 输出的简单快速的Logger。 zerolog 的 API 旨在为开发者提供出色的体验和令人惊叹的[性能](https://git ......
zerolog

Go每日一库之87:zap

## [⚡ZAP](https://github.com/uber-go/zap) ## 简介 ### zap 是什么? [⚡ZAP](https://github.com/uber-go/zap) 是uber 开源的提供快速,结构化,高性能的日志记录包。 ### zap 高性能体现在哪里? 在介绍 ......
zap

Go每日一库之73:gorilla-mux

## 简介 [`gorilla/mux`](https://github.com/gorilla/mux)是 gorilla Web 开发工具包中的路由管理库。gorilla Web 开发包是 Go 语言中辅助开发 Web 服务器的工具包。它包括 Web 服务器开发的各个方面,有表单数据处理包[`g ......
gorilla-mux gorilla mux