使用testify简化TDD测试

简介 testify的功能包括: Easy assertions Mocking Testing suite interfaces and functions assert 该assert软件包提供了一些有用的方法,使您可以在Go中编写更好的测试代码。 打印友好,易于

Go语言快速解析JSON:gjson

前言 GJSON是一个Go包,它提供了一种快速,简单的方法来从json文档中获取值。它具有诸如单行检索,点符号路径,迭代和解析json行之类的

TDD与BDD

前言 如果你关注软件开发最佳实践方面的话题,你肯定听说过测试驱动开发(TDD - Test Driven Development) 和行为驱动开发(BDD - Behavior Driven Development)。这篇

Go中的参数验证:validator

快速使用 先安装: 1 go get github.com/go-playground/validator/v10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package main import ( "fmt" "github.com/go-playground/validator/v10" ) type User struct { Name string `validate:"min=6,max=10"` Age int `validate:"min=1,max=100"` } func main() { validate := validator.New() u1 := User{Name: "lidajun", Age: 18} err := validate.Struct(u1) fmt.Println(err)

参数验证库:validator.v9

标准库 package validator import “gopkg.in/go-playground/validator.v9” Package validator 基于标签对结构和单个字段实现值验证. 它还可以处理嵌套结构的跨字段和跨结构验证,并具有深入研究任何类型的数组和映射的能力。 查

如何检测HTTP请求的文件类型

做 Web 应用程序时,经常需要对用户上传的文件类型做一下检查,比如判断上传的是否是 png 、gif、jpg 等图片类型,还是 pdf。并针对不同的类型做一些

Header:Content-Disposition

Content-Disposition Content-Disposition 有两种应用场景。 用在HTTP响应头中 场景一是用在HTTP的响应头中,指示响应的内容该以何种形式展示。是以内联的形式(即网页或者页面的一部

如何防止XSS攻击

XSS 攻击的介绍 在开始本文之前,我们先提出一个问题,请判断以下两个说法是否正确: XSS 防范是后端 RD(研发人员)的责任,后端 RD 应该在所有用户提交数据

如何防止CSRF攻击

CSRF攻击 CSRF漏洞的发生 相比XSS,CSRF的名气似乎并不是那么大,很多人都认为CSRF“不那么有破坏性”。真的是这样吗? 接下来有请小

如何在Go中使用JWT

jwt-go 编写jwt工具 我们需要编写一个jwt的工具,我们在pkg下的util目录新建jwt.go,写入文件内容: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Go如何生成swagger文档

swagger Swagger是一个简单但功能强大的API表达工具。它具有地球上最大的API工具生态系统,数以千计的开发人员,使用几乎所有的现代编程语言,

Go调用Python

Go-Python 环境配置 Python :确保Python正确安装,所谓正确安装,就是在系统中能找到libpython.so(dylib),找到Python.h。一般l

time-rate源码剖析

主要逻辑 Allow Allow 方法的调用链:lim.Allow() bool → lim.AllowN(time.Now(), 1) → lim.reserveN(now, n, 0).ok,因此 reserveN 方法的实现很关键 1 2 3 4 5 6 7 8 9 10 11 // Allow is shorthand for AllowN(time.Now(), 1). func (lim *Limiter) Allow()

熔断器hystrix实现

引言 熔断器是当依赖的服务已经出现故障时,为了保证自身服务的正常运行不再访问依赖的服务,防止雪崩效应.Hystrix断路器的工作原理是: 熔断器

为什么Response.Body需要被关闭

为什么需要关闭? 1 2 3 4 5 6 7 Body io.ReadCloser The http Client and Transport guarantee that Body is always non-nil, even on responses without a body or responses with a zero-length body. It is the caller's responsibility to close Body. The default HTTP client's Transport does not attempt to reuse HTTP/1.0 or HTTP/1.1 TCP connections ("keep-alive") unless the Body is read to

GoKit使用:链路追踪Zipkin

服务端trace 增加trace代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 //创建zipkin上报管理器 reporter := http.NewReporter("http://localhost:9411/api/v2/spans") //运行结束,关闭上报管理器的f

GoKit使用:监控功能

引言 目前,几乎所有的研发人员每天都在跟API打交道:后端为实现业务不停的生产API,前端为实现产品功能不停的调用API。API已经成为前端与