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

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

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

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

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

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

Go - 代码生成工具

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

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

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

Go - 实现项目内链路追踪

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

Go - httpclient 常用操作

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

Go - 统一定义 API 错误码

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

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

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

Go - 基于 GORM 获取当前请求所执行的 SQL 信息

2021-01-23
阅读 3 分钟
6.8k
前言为了便于精准排查问题,需要将当前的请求信息与当前执行的 SQL 信息设置对应关系记录下来,记录的 SQL 信息包括:执行 SQL 的当前时间;执行 SQL 的文件地址和行号;执行 SQL 的花费时长;执行 SQL 的影响行数;执行的 SQL 语句;数据库组件使用的是 GORM。思路1、在执行 SQL 前,设置开始执行时间(计算执行时长会...

当查询的数据来自多个数据源,有哪些好的分页策略?

2020-03-16
阅读 4 分钟
3.3k
概述 在业务系统开发中,尤其是后台管理系统,列表页展示的数据来自多个数据源,列表页需要支持分页,怎么解决? 问题 如上图,数据源可能来自不同 DB 数据库,可能来自不同 API 接口,也可能来自 DB 和 API 的组合。 我这也没有太好的解决方案,接到这样的需求,肯定首先和需求方沟通,这样分页是否合理。 无非就两种方...

究竟什么样的开发流程是规范的?

2020-03-02
阅读 3 分钟
7.1k
概述 有读者反馈,读了文章 一线技术管理者究竟在管什么事? 收获满满,但还有点不过瘾,还想了解更细的东西... 这篇文章分享开发流程规范,目的是提高产品质量,优化开发流程,供大家参考。 规范是死的,人是活的,希望自己定的规范,不要被打脸。 接下来从以上六个阶段进行逐一拆解。 1 需求评审 作为技术人员肯定都参...

Git 分支设计规范

2020-02-24
阅读 3 分钟
3.9k
概述 这篇文章分享 Git 分支设计规范,目的是提供给研发人员做参考。 规范是死的,人是活的,希望自己定的规范,不要被打脸。 在说 Git 分支规范之前,先说下在系统开发过程中常用的环境。 简称 全称 DEV Development environment FAT Feature Acceptance Test environment UAT User Acceptance Test environment PRO Pr...

API 接口设计规范

2020-02-24
阅读 2 分钟
5.8k
概述 这篇文章分享 API 接口设计规范,目的是提供给研发人员做参考。 规范是死的,人是活的,希望自己定的规范,不要被打脸。 路由命名规范 动作 前缀 备注 获取 get get{XXX} 获取 get get{XXX}List 新增 add add{XXX} 修改 update update{XXX} 保存 save save{XXX} 删除 delete delete{XXX} 上传 upload upload{XXX} ...

一线技术管理者究竟在管什么事?

2020-02-24
阅读 3 分钟
1.6k
概述 上篇文章《一个人被提拔,不仅仅是能力,而是信任》 中分享了两个点: 什么样的工程师,容易被提拔? 当被提拔到一线管理者后,你的初衷是什么? 这篇文章分享 一线技术管理者 究竟在管什么事? 咱们从一次完整项目的发布说起,一次完整项目的发布,大概需要经过这几个大的节点: 项目立项 -> 需求评审 -> 视...

一个人被提拔,不仅仅是能力,而是信任

2020-02-24
阅读 1 分钟
1.5k
概述 学习并整理一些关于 一线管理 方面的知识。 今天分享的是 一个人被提拔,不仅仅是能力,而是信任。 虽然聪明的人很多,但是靠谱的人很少,比能力更重要的是工作的投入感和靠谱的态度。 那么问题来了,要怎么做才算靠谱? 怎么做才算靠谱? 主人翁意识 认真负责的态度。 积极主动的精神。 作为研发,我们要对我们交...

送别2019,期待2020!

2020-01-04
阅读 1 分钟
2k
概述 2019 年时间过得很快。 有欢笑、 有离别、 有压力、 有收获。 关于工作 项目发生了变动,团队也发生了变动,不过总体是成长的,在这感谢领导的关照、信任! 下半年开始学习 Go 语言,并用 Go 进行搭建项目,也算是刚刚入门了吧。 自己在团队内也进行了几次分享,锻炼了自己的上台说的能力。 期间听过一些大牛的分享...

Go - 如何解析 JSON 数据?

2020-01-04
阅读 4 分钟
18.1k
概述 最近掉进需求坑了,刚爬上来,评估排期出现了严重问题,下面三张图很符合当时的心境。 谈需求 估排期 开始干 为啥会这样,我简单总结了下: 与第三方对接。 跨团队对接。 首次用 Go 做项目。 业务流程没屡清楚就出排期(大坑)。 需求调整后未进行调整排期(大坑)。 有了这次经验,后期关于如何评估排期也可以和大...

Go - 使用 defer 函数 要注意的几个点

2019-12-22
阅读 3 分钟
9k
概述 defer 函数大家肯定都用过,它在声明时不会立刻去执行,而是在函数 return 后去执行的。 它的主要应用场景有异常处理、记录日志、清理数据、释放资源 等等。 这篇文章不是分享 defer 的应用场景,而是分享使用 defer 需要注意的点。 咱们先从一道题开始,一起来感受下 ... {代码...} 输出什么? ... 接下来,先容我...

Go gRPC 调试工具

2019-11-09
阅读 2 分钟
10.8k
当我们在写 HTTP 接口的时候,使用的是 Postman 进行接口调试,那么在写 gRPC 接口的时候,有没有类似于 Postman 的调试工具呢?

[系列] - go-gin-api 路由中间件 - 签名验证(七)

2019-10-26
阅读 13 分钟
8.5k
上篇文章分享了,路由中间件 - Jaeger 链路追踪(实战篇),文章反响真是出乎意料, 「Go中国」 公众号也转发了,有很多朋友加我好友交流,直呼我大神,其实我哪是什么大神,只不过在本地实践了而已,对于 Go 语言的使用,我还是个新人,在这里感谢大家的厚爱!

[系列] - go-gin-api 路由中间件 - Jaeger 链路追踪(六)

2019-09-28
阅读 5 分钟
4k
概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - Jaeger 链路追踪(理论篇),这篇文章咱们接着分享:路由中间件 - Jaeger 链路追踪(实战篇)。 这篇文章,确实让大家久等了,主要是里面有一些技术点都是刚刚研究的,没有存货。 先看下咱们要实现的东西: API 调用了 5 个服务,其中 4 个 gRPC 服务,1 个 HTT...

[系列] - go-gin-api 路由中间件 - Jaeger 链路追踪(五)

2019-09-16
阅读 4 分钟
7.3k
概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - 捕获异常,这篇文章咱们分享:路由中间件 - Jaeger 链路追踪。 啥是链路追踪? 我理解链路追踪其实是为微服务架构提供服务的,当一个请求中,请求了多个服务单元,如果请求出现了错误或异常,很难去定位是哪个服务出了问题,这时就需要链路追踪。 咱们先看一张...

[系列] - go-gin-api 路由中间件 - 捕获异常(四)

2019-09-11
阅读 4 分钟
6.7k
上篇文章分享了,路由中间件 - 日志记录,这篇文章咱们分享:路由中间件 - 捕获异常。当系统发生异常时,提示 “系统异常,请联系管理员!”,同时并发送 panic 告警邮件。

[系列] - go-gin-api 路由中间件 - 日志记录(三)

2019-09-05
阅读 5 分钟
8.5k
上篇文章分享了,规划项目目录和参数验证,其中参数验证使用的是 validator.v8 版本,现已更新到 validator.v9 版本,最新代码查看 github 即可。

[系列] - go-gin-api 规划目录和参数验证(二)

2019-08-28
阅读 4 分钟
9k
概述 首先同步下项目概况: 上篇文章分享了,使用 go modules 初始化项目,这篇文章咱们分享: 规划目录结构 模型绑定和验证 自定义验证器 制定 API 返回结构 废话不多说,咱们开始吧。 规划目录结构 {代码...} 上面的目录结构是我自定义的,大家也可以根据自己的习惯去定义。 controller 控制器层主要对提交过来的数据...

[系列] - 使用 go modules 包管理工具(一)

2019-08-26
阅读 2 分钟
2.7k
概述 我想实现一个开箱即用的 API 框架的轮子,这个轮子是基于 Gin 基础上开发的。 为什么是开箱即用,它会集成哪些功能? 以上功能点,都是常用的,后期可能还会增加。 废话不多说,咱们开始吧。 创建一个项目,咱们首先要考虑一个依赖包的管理工具。 常见的包管理有,dep、go vendor、glide、go modules 等。 最开始,...

Swoole 启动一个服务,开启了哪些进程和线程?

2019-06-24
阅读 3 分钟
5.8k
概述 Swoole 启动一个服务,开启了哪些进程和线程? 为了解决这个问题,咱们启动一个最简单的服务,一起看看究竟启动了哪些进程和线程? 然后结合官网运行流程图,对每个进程和线程进行归类。 服务启动后打印出当前 Swoole 版本 和 当前 CPU 核数。 打印 Swoole 版本,是让大家可以下载这个版本 去运行代码。 打印 CPU ...

压测 swoole_websocket_server 性能

2019-06-10
阅读 4 分钟
5k
概述 这是关于 Swoole 入门学习的第十篇文章:压测 swoole_websocket_server 性能。 第九篇:Swoole Redis 连接池的实现 第八篇:Swoole MySQL 的实现 第七篇:Swoole RPC 的实现 第六篇:Swoole 整合成一个小框架 第五篇:Swoole 多协议 多端口 的应用 第四篇:Swoole HTTP 的应用 第三篇:Swoole WebSocket 的应用 第...

Swoole Redis 连接池的实现

2019-06-03
阅读 11 分钟
8.1k
概述 这是关于 Swoole 入门学习的第九篇文章:Swoole Redis 连接池的实现。 第八篇:Swoole MySQL 的实现 第七篇:Swoole RPC 的实现 第六篇:Swoole 整合成一个小框架 第五篇:Swoole 多协议 多端口 的应用 第四篇:Swoole HTTP 的应用 第三篇:Swoole WebSocket 的应用 第二篇:Swoole Task 的应用 第一篇:Swoole Tim...