如何基于 Gin 封装出属于自己 Web 框架?

4 月 7 日
阅读 2 分钟
98
封装路由:Gin 的路由是通过 HTTP 方法和 URL 路径进行匹配的,你可以根据自己的需求,封装出符合应用的业务需求的路由。你可以考虑将路由进行分类,例如公共路由、私有路由等,以方便管理。

看看我精心整理的 Go 面试干货,面试时候能帮到你

4 月 7 日
阅读 2 分钟
121
这份题库经过精心策划和整理,覆盖了 Golang 领域的十大核心方面,包括并发与并行、通道的高级用法、性能优化、高级数据结构和算法、系统设计与架构、测试与错误处理、包管理与模块、反射和接口、安全性、参考简历等,是您面试准备的得力助手。

如何基于 Gin 封装出属于自己 Web 框架?

1 月 12 日
阅读 2 分钟
454
封装路由:Gin 的路由是通过 HTTP 方法和 URL 路径进行匹配的,你可以根据自己的需求,封装出符合应用的业务需求的路由。你可以考虑将路由进行分类,例如公共路由、私有路由等,以方便管理。

Gin 实现自动生成接口文档

1 月 8 日
阅读 5 分钟
437
2)保持文档与代码同步:代码和文档往往是不同步的,当代码发生变更时,手动更新文档可能容易出现遗漏或错误。自动生成接口文档可以保持文档与代码的同步,确保文档的准确性和实时性。

简洁、轻量级的 Go API 框架

1 月 8 日
阅读 2 分钟
5.7k
go-gin-api 这是一个基于 Gin 的 API 框架,它提供了 WEB 界面一键安装的方式,让你可以快速启动一个开箱即用的 Go 项目。无论你是否有项目经验,这个框架都适合作为练手项目使用 (新手入门必备) 。

Go - 如何编写 ProtoBuf 插件 (三) ?

2022-01-09
阅读 2 分钟
1.9k
上篇文章《Go - 如何编写 ProtoBuf 插件 (二) 》,分享了基于 自定义选项 定义了 interceptor 插件,然后在 helloworld.proto 中使用了插件,最后在 golang 代码中获取到使用的插件信息。

Go - 如何编写 ProtoBuf 插件(二)?

2021-12-18
阅读 5 分钟
5.4k
上篇文章《Go - 如何编写 ProtoBuf 插件 (一) 》,分享了使用 proto3 的 自定义选项 可以实现插件的编写,说到基于 MethodOptions 和 ServiceOptions 选项去实现 method 和 service 自定义设置拦截器。

Go - 如何编写 ProtoBuf 插件 (一) ?

2021-12-18
阅读 2 分钟
5.7k
前言我们要知道 proto3 和 proto2 的语法,并不是完全兼容的。具体可查阅官方文档:OverviewLanguage Guide (proto2)Language Guide (proto3)如果上述链接无法打开,可以访问这个文档:Overview - 语雀 。自定义选项在 proto3 中,常见的实现插件的方式是使用 自定义选项,也就是 extend 标签,其中支持的 extend Option...

Go - 关于 protoc 工具的小疑惑

2021-12-06
阅读 2 分钟
4.7k
protoc 工具可以 通过相关插件 将 .proto 文件编译成 C、C++、Golang、Java、Python、PHP 等多种语言的代码。

Golang - 关于 proto 文件的一点小思考

2021-11-28
阅读 2 分钟
3.2k
我们常用的数据格式有 JSON 和 XML,为什么使用 ProtoBuf ?是因为它的传输快,为什么传输快?大家可以找下资料。使用 .proto 文件进行描述要序列化的数据结构,然后将写好 .proto 文件使用 protoc 就可以很容易编译成众多计算机语言的接口代码。

Go - 使用 sync.WaitGroup 来实现并发操作

2021-11-01
阅读 2 分钟
2.4k
如果你有一个任务可以分解成多个子任务进行处理,同时每个子任务没有先后执行顺序的限制,等到全部子任务执行完毕后,再进行下一步处理。这时每个子任务的执行可以并发处理,这种情景下适合使用 sync.WaitGroup。

Go - 使用 sync.Map 来解决 map 的并发操作问题

2021-10-30
阅读 2 分钟
1.9k
在 Golang 中 map 不是并发安全的,自 1.9 才引入了 sync.Map ,sync.Map 的引入确实解决了 map 的并发安全问题,不过 sync.Map 却没有实现 len() 函数,如果想要计算 sync.Map 的长度,稍微有点麻烦,需要使用 Range 函数。

Go - 基于逃逸分析来提升程序性能

2021-10-30
阅读 2 分钟
2.2k
因为我们想要提升程序性能,通过逃逸分析我们能够知道变量是分配到堆上还是栈上,如果分配到栈上,内存的分配和释放都是由编译器进行管理,分配和释放的速度非常快,如果分配到堆上,堆不像栈那样可以自动清理,它会引起频繁地进行垃圾回收(GC),而垃圾回收会占用比较大的系统开销。

Go - 使用 sync.Pool 来减少 GC 压力

2021-10-30
阅读 1 分钟
4k
sync.Pool 本质是用来保存和复用临时对象,以减少内存分配,降低 GC 压力,比如需要使用一个对象,就去 Pool 里面拿,如果拿不到就分配一份,这比起不停生成新的对象,用完了再等待 GC 回收要高效的多。

为开源项目 go-gin-api 增加后台任务模块

2021-09-05
阅读 2 分钟
3.5k
任务管理界面 (WEB)支持在 WEB 界面 中对任务进行管理,例如:新增任务、编辑任务、启用/禁用任务、手动执行任务 等。任务的属性包括:任务名称执行方式SHELLHTTP表达式(/5 *)命令超时时间(秒)重试次数重试间隔(秒)执行结束是否通知不通知失败通知结束通知结果关键字匹配通知状态备注当执行方式为 HTTP 时,支持选...

分布式事务之最终一致性实现方案

2021-08-21
阅读 1 分钟
4.5k
前言这篇文章是《关于分布式事务的理解》的后续篇:分布式事务之最终一致性实现方案。还是那个电商需求,一个订单支付完成后的业务场景,有如下操作:更改订单的状态为 “已支付”扣减商品库存给会员增加积分创建出库单通知仓库发货咱们使用 最终一致性方案 去实现它。什么是最终一致性?从字面上看就是 保证数据最后的一...

回答两个被频繁问到的代码写法问题

2021-08-14
阅读 2 分钟
2.4k
前言根据使用者的反馈,回答关于开源项目:go-gin-api 中被频繁问到的两个代码写法问题。以如下代码片段为例:第 8 行,这种写法是什么意思?第 11 行,为什么定义一个 i() 方法?问题一 {代码...} 这代码是什么意思?强制 *signature 去实现 Signature 接口,编译器会检查 *signature 类型是否实现了 Signature 接口。 ...

根据使用者反馈,对开源项目 go-gin-api 新增两个功能

2021-07-13
阅读 2 分钟
2.4k
前言根据使用者的反馈,对开源项目:go-gin-api 新增两个小功能。两个小功能都与语言包有关:功能1:接口返回的错误信息支持中英文;功能2:参数验证的错误信息支持中英文;我的实现方式是在项目安装的时候,选择 语言,然后项目中根据选择的语言进行输出对应的中英文,如下图。接口返回的错误信息支持中英文代码位置项...

关于处理电商系统订单状态的流转,分享下我的技术方案(附带源码)

2021-07-05
阅读 5 分钟
3.8k
前言在设计电商系统订单模块时,订单会涉及各种状态以及状态与状态之间的流转,可扩展性、可维护性 是我们需要关注的重点!本文分享一下我的技术方案。如上图,使用 golang 实现上图的订单流转,同时当后续增加订单状态或订单事件时,可以进行快速完成。目的关于订单状态的处理,使用统一入口,提高程序的 可扩展性 和 ...

函数的不定参数你会用吗?

2021-06-03
阅读 2 分钟
2.2k
如果一个方法中需要传递多个参数且某些参数又是非必传,应该如何处理?案例 {代码...} NewFriend(),方法中参数 sex 和 age 为非必传参数,这时方法如何怎么写?传参使用不定参数!想一想怎么去实现它?看一下这样写可以吗? {代码...} 有没有更好的方案呢?传递结构体... 恩,这也是一个办法。咱们看看别人的开源代码怎...

如何设计 API 接口,实现统一格式返回?

2021-06-01
阅读 1 分钟
3.9k
前后端接口交互我们都知道,前端通常会通过后台提供的接口来获取数据来完成前端页面的渲染,前端可以为 PC 端、M 端、小程序、APP 等。在这废话就不多说了,这不是重点。接口返回值约定返回值规范设置返回的 HTTP 响应状态码;发生错误时,需设置 Response Body 的错误码和描述信息;正确返回HTTP 响应状态码,设置成 20...

优雅地处理错误真是一门学问啊!

2021-06-01
阅读 2 分钟
3.4k
这个大家肯定使用过,标准库的 errors 错误实现比较简单,无法进行堆栈追溯,对于产生错误时的上层调用者来讲不是很友好,无法获得错误的调用链详细信息。

Go - 开箱即用,WEB 界面一键安装,没有项目经验,可以拿这个练手

2021-05-23
阅读 4 分钟
3.1k
因为程序会使用到 Redis 和 MySQL,所以安装前请输入 Redis、MySQL 配置信息,点击初始化按钮,会将用到的数据表和默认数据进行初始化,在右侧可以看到初始化的日志信息。
封面图

Go - 一个对新手很友好的项目(带界面)

2021-04-24
阅读 4 分钟
6.1k
go-gin-api 是基于 Gin 进行模块化设计的 API 框架,封装了常用的功能,使用简单,致力于进行快速的业务研发,同时增加了更多限制,约束项目组开发成员,规避混乱无序及自由随意的编码。

Go - 代码生成工具

2021-02-28
阅读 6 分钟
7.8k
分享两个常用的代码生成工具:gormgenhandlergengormgen基于 MySQL 数据表结构进行生成 3 个文件:生成表的 struct 结构体生成表的 Markdown 文档生成表的 CURD 方法场景在进行业务需求开发时,创建完数据表后,执行代码生成工具,常用的 CURD 操作全部生成完毕,使用的时候只需要 . 后面的方法即可,这样大大提高了业务...

Go - 实现项目内链路追踪(二)

2021-02-10
阅读 3 分钟
3.4k
上篇文章 Go - 实现项目内链路追踪 分享了,通过 链路 ID 可以将 请求信息、响应信息、调用第三方接口的信息、调试信息、执行的 SQL 信息、执行的 Redis 信息 串起来,记录的具体参数在文件中都有介绍。

Go - 实现项目内链路追踪

2021-02-01
阅读 12 分钟
6.5k
从图中可以清晰的看出他们之间的调用关系,通过一个例子说明下链路的重要性,比如对方调我们一个接口,反馈在某个时间段这接口太慢了,在排查代码发现逻辑比较复杂,不光调用了多个三方接口、操作了数据库,还操作了缓存,怎么快速定位是哪块执行时间很长?

Go - httpclient 常用操作

2021-01-25
阅读 4 分钟
8.2k
模块介绍httpclient 是基于 net/http  封装的 Go HTTP 客户端请求包,支持常用的请求方式、常用设置,比如:支持设置 Mock 信息支持设置失败时告警支持设置失败时重试支持设置项目内部的 Trace支持设置超时时间、Header 等请求说明方法名描述httpclient.Get()GET 请求httpclient.PostForm()POST 请求,form 形式httpclie...

Go - 统一定义 API 错误码

2021-01-23
阅读 3 分钟
5.1k
改之前在使用 gin 开发接口的时候,返回接口数据是这样写的。 {代码...} 这种写法 code、msg 都是在哪需要返回在哪定义,没有进行统一管理。改之后 {代码...} errno.ErrUserPhone、errno.OK 表示自定义的错误码,下面会看到定义的地方。.WithID() 设置当前请求的唯一ID,也可以理解为链路ID,忽略也可以。.WithData() 设...

Go - 常用签名算法的基准测试

2021-01-23
阅读 2 分钟
3.3k
签名验证是为了保证接口安全和识别调用方身份,同时还需要满足以下几点:可变性:每次的签名必须是不一样的。时效性:每次请求的时效性,过期作废。唯一性:每次的签名是唯一的。完整性:能够对传入数据进行验证,防止篡改。签名规则大同小异,根据自己的业务情况进行制定即可。签名过程中我们会用到的几种算法,接下来...