摘要: 安装界面 启动程序之后,会在浏览器中自动打开安装界面。 因为程序会使用到 Redis 和 MySQL,所以安装前请输入 Redis、MySQL 配置信息,点击初始化按钮,会将用到的数据表和默认数据进行初始化,在右侧可以看到初始化的日志信息。 如上,初始化成功后,重新启动程序,会在浏览器中自动打开登录 阅读全文
posted @ 2021-05-23 20:35 程序员新亮 阅读(999) 评论(0) 推荐(0) 编辑
摘要: 思路 在基于 Gin 封装出属于自己的 Web 框架前,你需要先了解 Gin 的基本用法和设计理念。 然后,你可以通过以下步骤来封装自己的 Web 框架: 封装路由:Gin 的路由是通过 HTTP 方法和 URL 路径进行匹配的,你可以根据自己的需求,封装出符合应用的业务需求的路由。你可以考虑将路由 阅读全文
posted @ 2024-01-12 22:28 程序员新亮 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 前言 上篇文章《Go - 如何编写 ProtoBuf 插件 (二) 》,分享了基于 自定义选项 定义了 interceptor 插件,然后在 helloworld.proto 中使用了插件,最后在 golang 代码中获取到使用的插件信息。 接上篇,继续分享。 既然获取到了插件信息,我们就可以使用它 阅读全文
posted @ 2022-01-16 17:06 程序员新亮 阅读(390) 评论(0) 推荐(0) 编辑
摘要: 前言 上篇文章《Go - 如何编写 ProtoBuf 插件 (一) 》,分享了使用 proto3 的 自定义选项 可以实现插件的编写,说到基于 MethodOptions 和 ServiceOptions 选项去实现 method 和 service 自定义设置拦截器。 接上篇文章,继续分享。 定义 阅读全文
posted @ 2021-12-18 15:26 程序员新亮 阅读(564) 评论(0) 推荐(0) 编辑
摘要: 前言 我们要知道 proto3 和 proto2 的语法,并不是完全兼容的。 具体可查阅官方文档: Overview Language Guide (proto2) Language Guide (proto3) 如果上述链接无法打开,可以访问这个文档:Overview - 语雀 。 自定义选项 在 阅读全文
posted @ 2021-12-18 15:25 程序员新亮 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 前言 protoc 工具可以干什么? protoc 工具可以 通过相关插件 将 .proto 文件编译成 C、C++、Golang、Java、Python、PHP 等多种语言的代码。 本文主要讨论通过 protoc 生成 Golang 代码,例如我们常见的命令: protoc -I . --go_o 阅读全文
posted @ 2021-12-06 07:20 程序员新亮 阅读(1786) 评论(1) 推荐(0) 编辑
摘要: 前言 ProtoBuf 是什么? ProtoBuf 是一套接口描述语言(IDL),通俗的讲是一种数据表达方式,也可以称为数据交换格式。 我们常用的数据格式有 JSON 和 XML,为什么使用 ProtoBuf ?是因为它的传输快,为什么传输快?大家可以找下资料。使用 .proto 文件进行描述要序列 阅读全文
posted @ 2021-11-28 14:24 程序员新亮 阅读(995) 评论(0) 推荐(0) 编辑
摘要: 前言 如果你有一个任务可以分解成多个子任务进行处理,同时每个子任务没有先后执行顺序的限制,等到全部子任务执行完毕后,再进行下一步处理。这时每个子任务的执行可以并发处理,这种情景下适合使用 sync.WaitGroup。 虽然 sync.WaitGroup 使用起来比较简单,但是一不留神很有可能踩到坑 阅读全文
posted @ 2021-11-01 20:47 程序员新亮 阅读(460) 评论(0) 推荐(0) 编辑
摘要: 前言 在 Golang 中 map 不是并发安全的,自 1.9 才引入了 sync.Map ,sync.Map 的引入确实解决了 map 的并发安全问题,不过 sync.Map 却没有实现 len() 函数,如果想要计算 sync.Map 的长度,稍微有点麻烦,需要使用 Range 函数。 map 阅读全文
posted @ 2021-10-30 16:15 程序员新亮 阅读(619) 评论(1) 推荐(0) 编辑
摘要: 前言 为什么需要了解逃逸分析? 因为我们想要提升程序性能,通过逃逸分析我们能够知道变量是分配到堆上还是栈上,如果分配到栈上,内存的分配和释放都是由编译器进行管理,分配和释放的速度非常快,如果分配到堆上,堆不像栈那样可以自动清理,它会引起频繁地进行垃圾回收(GC),而垃圾回收会占用比较大的系统开销。 阅读全文
posted @ 2021-10-30 16:14 程序员新亮 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 前言 sync.Pool 是临时对象池,存储的是临时对象,不可以用它来存储 socket 长连接和数据库连接池等。 sync.Pool 本质是用来保存和复用临时对象,以减少内存分配,降低 GC 压力,比如需要使用一个对象,就去 Pool 里面拿,如果拿不到就分配一份,这比起不停生成新的对象,用完了再 阅读全文
posted @ 2021-10-30 16:12 程序员新亮 阅读(208) 评论(0) 推荐(0) 编辑