geeRPC学习 RPC针对geeRPC进行了学习,原文链接:geeRPC 服务端与消息编码以下是对Codec接口的详细解释: 1. 整体作用Codec接口用于定义编解码器的通用行为。它抽象了编解码过程中涉及的关键操作,使得不同的编解码器实现可以遵循相同的接口规范,方便在程序中进行统一管理和替换。这种设计模式提高了代码的可维护性和可扩展性,特别是在需要处理多种编码格式的应用场景中。 2. 接口方法解释 io.Clo 2025-01-22 geektutu
HTTP状态码 HTTP状态码[HTTP常见状态码 && HTTP的逐步发展(通俗易懂版)_网络请求码418-CSDN博客](https://blog.csdn.net/ScheenDuan/article/details/142343622#:~:text=HTTP 状态码 是) HTTP 状态码是一组由服务器返回给客户端的标准响应代码,用来表示 HTTP 请求的状态。它们帮助客户端了解请求的结 2025-01-22 bluebell
Redis实现投票机制的思路 zset每一个元素都有一个与之对应的分数,分数用于排序 设计两个zset(有序集合)key分别对应post:time:和post:score:,即帖子对应时间和分数,对应按照时间查找和按照分数查询 哪个用户对哪个帖子投票投的是赞成还是反对也要记录,再设计一个key为post:voted :分割key,相当于命名空间,方便查询和拆分 声明常量,可以写一个前缀KeyPrefix表明命名空间,方便业务 2025-01-22 bluebell
JWT的Go语言实践 JWT参考:在gin框架中使用JWT | 李文周的博客 (liwenzhou.com) 原理Go实践Go语言中直接使用jwt-go库来实现生成JWT和解析JWT的功能。 定制声明我不知道为什么这个地方要叫做Claims,其实对应原理的Payload(负载)。jwt官方标准的负载封装为jwt.StandardClaims,我们将其嵌入到自定义的结构体中,形成自定义的Claims—— 12345// 2025-01-22 bluebell
fsnotify 文件系统通知库 fsnotify 是一个用于 Go 语言的文件系统通知库,它可以监视文件或目录的变化,比如文件的创建、删除、修改等。通过 fsnotify,你可以在文件系统发生变化时做出相应的响应,非常适合用于配置文件热加载、日志监控等场景。 常见应用场景 配置文件热加载:当配置文件发生变化时自动重新加载配置,不需要手动重启程序。 日志监控:监控日志文件是否被修改,实时获取日志变化。 文件监控:对文件的创建、删除 2025-01-22 bluebell
go-mysql&sqlx go-sql特性go-sql的执行特性是query和exec执行完返回对数据库的链接,需要再执行Scan绑定到Go代码的变量中。因此需要手动关闭返回对数据库的链接,注意在错误判断后defer关闭。 连接流程:sql.Open写入数据源但不连接,db.Ping尝试连接 123456789101112func initDB() (err error) { dns := "user: 2025-01-22 bluebell
validator使用 validatorvalidator库参数校验若干实用技巧 | 李文周的博客 (liwenzhou.com) 概述validator是Go语言社区中开源的数据验证的工具包,Gin框架使用这个包进行数据验证。 作用总的来说,validator包为 Go 语言开发者提供了一种方便、灵活且强大的方式来进行数据验证,有助于提高代码的可靠性和健壮性,减少因数据不合法而导致的错误和异常。 结构体字段验证(基础 2025-01-22 bluebell
Viper 配置管理库 Viper 是一个流行的 Go 语言配置管理库,专门用于处理应用程序的配置文件和环境变量。它功能强大且灵活,能够支持多种格式的配置文件,如 JSON、YAML、TOML、HCL,以及环境变量、远程配置系统等。 Viper 的特点 多种配置文件格式:Viper 支持多种常见的配置文件格式,如 JSON、YAML、TOML、HCL、Java properties 文件。 环境变量支持:Viper 可以 2025-01-22 bluebell
docker-compose部署nginx + mysql + gin 在 Docker 中,自动生成的容器名称可以通过几种方式获取并在 docker-compose.yml 文件中使用。以下是几种常见的场景和解决方案: 1. 通过 container_name 指定容器名虽然 Docker 默认会为每个容器生成一个随机的名称,但你可以通过在 docker-compose.yml 文件中使用 container_name 来显式地指定容器名称。这是最常见和简单的做法。 2025-01-22 bluebell
bluebell 构建思路 建构思路用户注册首先创建项目,先创建好几个基本的文件夹,如routers、controller、logic、models、dao。在根目录创建main.go文件。 把路由先搭建起来,在routers文件夹中创建routers.go,新建函数func SetupRouter(mode string) *gin.Engine ,简简单单初始化一下路由。 在models文件夹下新建user.go,定义用 2025-01-22 bluebell