随笔分类 - Go篇
摘要:思路 在基于 Gin 封装出属于自己的 Web 框架前,你需要先了解 Gin 的基本用法和设计理念。 然后,你可以通过以下步骤来封装自己的 Web 框架: 封装路由:Gin 的路由是通过 HTTP 方法和 URL 路径进行匹配的,你可以根据自己的需求,封装出符合应用的业务需求的路由。你可以考虑将路由
阅读全文
摘要:前言 上篇文章《Go - 如何编写 ProtoBuf 插件 (二) 》,分享了基于 自定义选项 定义了 interceptor 插件,然后在 helloworld.proto 中使用了插件,最后在 golang 代码中获取到使用的插件信息。 接上篇,继续分享。 既然获取到了插件信息,我们就可以使用它
阅读全文
摘要:前言 上篇文章《Go - 如何编写 ProtoBuf 插件 (一) 》,分享了使用 proto3 的 自定义选项 可以实现插件的编写,说到基于 MethodOptions 和 ServiceOptions 选项去实现 method 和 service 自定义设置拦截器。 接上篇文章,继续分享。 定义
阅读全文
摘要:前言 我们要知道 proto3 和 proto2 的语法,并不是完全兼容的。 具体可查阅官方文档: Overview Language Guide (proto2) Language Guide (proto3) 如果上述链接无法打开,可以访问这个文档:Overview - 语雀 。 自定义选项 在
阅读全文
摘要:前言 protoc 工具可以干什么? protoc 工具可以 通过相关插件 将 .proto 文件编译成 C、C++、Golang、Java、Python、PHP 等多种语言的代码。 本文主要讨论通过 protoc 生成 Golang 代码,例如我们常见的命令: protoc -I . --go_o
阅读全文
摘要:前言 ProtoBuf 是什么? ProtoBuf 是一套接口描述语言(IDL),通俗的讲是一种数据表达方式,也可以称为数据交换格式。 我们常用的数据格式有 JSON 和 XML,为什么使用 ProtoBuf ?是因为它的传输快,为什么传输快?大家可以找下资料。使用 .proto 文件进行描述要序列
阅读全文
摘要:前言 如果你有一个任务可以分解成多个子任务进行处理,同时每个子任务没有先后执行顺序的限制,等到全部子任务执行完毕后,再进行下一步处理。这时每个子任务的执行可以并发处理,这种情景下适合使用 sync.WaitGroup。 虽然 sync.WaitGroup 使用起来比较简单,但是一不留神很有可能踩到坑
阅读全文
摘要:前言 在 Golang 中 map 不是并发安全的,自 1.9 才引入了 sync.Map ,sync.Map 的引入确实解决了 map 的并发安全问题,不过 sync.Map 却没有实现 len() 函数,如果想要计算 sync.Map 的长度,稍微有点麻烦,需要使用 Range 函数。 map
阅读全文
摘要:前言 为什么需要了解逃逸分析? 因为我们想要提升程序性能,通过逃逸分析我们能够知道变量是分配到堆上还是栈上,如果分配到栈上,内存的分配和释放都是由编译器进行管理,分配和释放的速度非常快,如果分配到堆上,堆不像栈那样可以自动清理,它会引起频繁地进行垃圾回收(GC),而垃圾回收会占用比较大的系统开销。
阅读全文
摘要:前言 sync.Pool 是临时对象池,存储的是临时对象,不可以用它来存储 socket 长连接和数据库连接池等。 sync.Pool 本质是用来保存和复用临时对象,以减少内存分配,降低 GC 压力,比如需要使用一个对象,就去 Pool 里面拿,如果拿不到就分配一份,这比起不停生成新的对象,用完了再
阅读全文
摘要:任务管理界面 (WEB) 支持在 WEB 界面 中对任务进行管理,例如:新增任务、编辑任务、启用/禁用任务、手动执行任务 等。 任务的属性包括: 任务名称 执行方式 SHELL HTTP 表达式(*/5 * * * *) 命令 超时时间(秒) 重试次数 重试间隔(秒) 执行结束是否通知 不通知 失败
阅读全文
摘要:前言 根据使用者的反馈,回答关于开源项目:go-gin-api 中被频繁问到的两个代码写法问题。 以如下代码片段为例: 第 8 行,这种写法是什么意思? 第 11 行,为什么定义一个 i() 方法? 问题一 var _ Signature = (*signature)(nil) 这代码是什么意思?
阅读全文
摘要:前言 根据使用者的反馈,对开源项目:go-gin-api 新增两个小功能。 两个小功能都与语言包有关: 功能1:接口返回的错误信息支持中英文; 功能2:参数验证的错误信息支持中英文; 我的实现方式是在项目安装的时候,选择 语言,然后项目中根据选择的语言进行输出对应的中英文,如下图。 接口返回的错误信
阅读全文
摘要:前言 在设计电商系统订单模块时,订单会涉及各种状态以及状态与状态之间的流转,可扩展性、可维护性 是我们需要关注的重点!本文分享一下我的技术方案。 如上图,使用 golang 实现上图的订单流转,同时当后续增加订单状态或订单事件时,可以进行快速完成。 目的 关于订单状态的处理,使用统一入口,提高程序的
阅读全文
摘要:不要使用 + 和 fmt.Sprintf 操作字符串 不要使用 + 和 fmt.Sprintf 操作字符串,虽然很方便,但是真的很慢! 我们要使用 bytes.NewBufferString 进行处理。 基准测试如下: + func BenchmarkStringOperation1(b *test
阅读全文
摘要:如果一个方法中需要传递多个参数且某些参数又是非必传,应该如何处理? 案例 // NewFriend 寻找志同道合朋友 func NewFriend(sex int, age int, hobby string) (string, error) { // 逻辑处理 ... return "", nil
阅读全文
摘要:文章目录: 前后端接口交互 我们都知道,前端通常会通过后台提供的接口来获取数据来完成前端页面的渲染,前端可以为 PC 端、M 端、小程序、APP 等。 在这废话就不多说了,这不是重点。 接口返回值约定 返回值规范 设置返回的 HTTP 响应状态码; 发生错误时,需设置 Response Body 的
阅读全文
摘要:安装界面 启动程序之后,会在浏览器中自动打开安装界面。 因为程序会使用到 Redis 和 MySQL,所以安装前请输入 Redis、MySQL 配置信息,点击初始化按钮,会将用到的数据表和默认数据进行初始化,在右侧可以看到初始化的日志信息。 如上,初始化成功后,重新启动程序,会在浏览器中自动打开登录
阅读全文
摘要:分享两个常用的代码生成工具: gormgen handlergen gormgen 基于 MySQL 数据表结构进行生成 3 个文件: 生成表的 struct 结构体 生成表的 Markdown 文档 生成表的 CURD 方法 场景 在进行业务需求开发时,创建完数据表后,执行代码生成工具,常用的 C
阅读全文
摘要:httpclient 模块介绍 httpclient 是基于 net/http 封装的 Go HTTP 客户端请求包,支持常用的请求方式、常用设置,比如: 支持设置 Mock 信息 支持设置失败时告警 支持设置失败时重试 支持设置项目内部的 Trace 支持设置超时时间、Header 等 请求说明
阅读全文

浙公网安备 33010602011771号