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

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

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

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

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

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

Gin 实现自动生成接口文档

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

简洁、轻量级的 Go API 框架

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

关于项目中 Repository 层的思考

2022-01-16
阅读 1 分钟
3.1k
维护这一层的开发者,可以称为 仓库管理员 ,当使用者需要查询数据的时候,需要告诉仓库管理员,由仓库管理员拿给他,至于仓库管理员从哪拿的数据,使用者无需关系。

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

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

你知道什么是 AOP 吗?

2022-01-09
阅读 2 分钟
3.9k
前言AOP 的全称为 Aspect Oriented Programming,意思是:面向切面编程。为什么会有这篇文章?是因为看了 Laravel 中 Pipeline 的设计,发现 Pipeline 就是基于 AOP 思想的一种实现。说起 AOP,就不得不说起 OOP,它们又是什么关系,有什么区别?AOP 与 OOP 的区别OOP 我们都知道,全程为 Object Oriented Programming ...

岁末将至,再见 2021

2021-12-31
阅读 1 分钟
2.2k
本文参与了 SegmentFault 思否征文「2021 总结」,欢迎正在阅读的你也加入。前言如果用一个词总结我的 2021 ,我想应该是 从容不迫 。面对繁重的工作,从容不迫...面对突如其来的变动,从容不迫...其实自己知道虽然做到了一些从容不迫,但还是改不了自己的急性子。关于健康今年开启了室外跑步,累计跑了 220 km。还记得...

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

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

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

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

Go - 关于 protoc 工具的小疑惑

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

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

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

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

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

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

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

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

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

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

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

分布式之接口幂等性

2021-09-20
阅读 1 分钟
2.9k
幂等性 更多使用的情况是第一次请求知道结果,但是由于网络抖动或连接超时等情况未进行正常返回,在这种情况下系统自动再次发起请求,其目的是确认第一次是否请求完成。

分布式之配置中心

2021-09-11
阅读 1 分钟
2.6k
前言我们在平时工作中可能会有这样的需求,系统运行期间需要动态调整配置项,比如:调整系统告警人调整活动开关调整降级开关调整日志级别...以上这些还不够,随着程序功能的日益复杂对配置的期望也越来越高,还需要满足:实现分环境、分集群的管理配置实现配置的灰度发布配置的发布需要完善的授权机制配置的发布需要记录...

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

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

Kafka 与 RabbitMQ 如何选择使用哪个?

2021-08-28
阅读 1 分钟
3.7k
前言我们在工作中经常会用到异步消息,主要使用两种消息模式:消息队列发布/订阅消息队列:多个生产者可以向同一个消息队列发送消息,但是一个消息只能被一个消费者消费。发布/订阅:一个消息可以被多个订阅者并发的获取和处理。Kafka 和 RabbitMQ 都能满足如上的特性,那么我们应该如何选择使用哪一个?这两个 MQ 有什...

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

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

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

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

关于分布式事务的理解

2021-08-10
阅读 2 分钟
2.8k
业务场景电商业务上图是一个电商系统,当一个订单支付完成后的业务场景:更改订单的状态为 “已支付”扣减商品库存给会员增加积分创建出库单通知仓库发货想象一下,当订单支付完成后,个人积分延迟几分钟变更,这可以接受吗?火车票购票想想生活中火车票购票场景。想象一下,当最后一张火车票同时被两个人购买,去检票口检...

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

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

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

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

我是怎么写 Git Commit message 的?

2021-07-03
阅读 2 分钟
3.3k
作用编写格式化的 commit message 能够大大提高代码的维护效率。比如:可以提供更多的历史信息,方便快速浏览;可以过滤某些 commit(比如文档改动),便于快速查找信息;可以直接从 commit 生成 Change log;用的什么规范? {代码...} 其中,Header 是必需的,Body 和 Footer 可以省略。typetype 用于说明 commit 的类...

使用 Docker 秒速搭建多版本 PHP 开发环境

2021-07-03
阅读 4 分钟
7.2k
文章中使用的软件:Mac:11.4(macOS Big Sur) ,处理器为:Intel Core。Docker:3.3.3目标支持 PHP 5.6.x 环境支持 PHP 7.2.x 环境下载Docker 软件下载安装,不做过多解释,一步步安装即可。下载地址:[链接]代理设置 {代码...} 配置环境PHP 7.2.x,占用本地端口 8081启动 docker;下载压缩包:php7-2-x.zip 并进行解压...

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

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

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

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