Gin路由:冒号(:)与星号(*)

摘要:在使用Gin框架时,我们经常会用到 :* 来定义动态路由。它们看起来相似,但行为却大相径庭。GET /user/:nameGET /user/:name/*action 到底有什么区别?为什么有时访问一个URL会被自动重定向?本文将带你深入Gin路由匹配的核心,彻底搞懂路径参数和通配符的微妙之处,让你在设计API时更加得心应手。

Read more

从“洋葱”到“函数链”:彻底搞懂Gin中间件的核心实现

引言:在Web开发中,“中间件”是一个无处不在的核心概念。它像一道道安全门,优雅地处理着日志、认证、CORS等通用逻辑。本文将通过生动的“洋葱模型”比喻,带你理解中间件的设计哲学,并深入剖析Go语言中最流行的Web框架Gin是如何通过精巧的“函数链”机制来实现这一强大功能的。

Read more

mysql并发问题和隔离级别的梳理

关于—并发问题事务隔离级别InnoDB的实现——这三个概念是数据库理论与实践完美结合的典范。它们之间是**“问题 -> 解决方案 -> 具体实现”**的递进关系。

我们来把这条逻辑链彻底理顺。

Read more

关于回朔数据的存储

问题:历史信息是map存储吗?

结论先行:
历史数据不是类似map那样独立存储的,而是以**“版本链”的形式,串联在一种叫做undo log的特殊日志文件中。这个存储方式确实会占用额外且可能相当大**的磁盘空间。

Read more

binlog和redolog理解

redo logbinlog 是 MySQL 中两个非常重要但功能完全不同的日志系统。它们经常被放在一起比较,因为它们都记录了数据库的变更,但它们的设计目的、记录内容、所在层次和使用场景都有着本质的区别。

Read more

数据库三范式示例理解

理解数据库范式和函数依赖是数据库设计的基石。这些概念很抽象,但我们可以通过一个从混乱到有序的实际例子,一步步把它们弄清楚。

我们就用一个学校的“学生选课信息”表作为例子,看看它是如何从一个糟糕的设计,一步步通过范式变得“健康”的。


Read more

Go语言的“装箱”——你看不到的隐式转换

Go语言的“装箱”(Boxing)机制,就是当一个具体类型(Concrete Type)的值被转换成接口类型(Interface Type)时发生的隐式转换过程。

引言

你每天都在使用fmt.Println(),但你知道每次调用它时,Go都在幕后为你做了什么吗?你是否遇到过一个非nilerror变量,其内部却是一个nil指针的“陷阱”?这些问题的答案都指向同一个核心概念:装箱(Boxing)。本文将带你深入理解Go语言中这个重要但常常被忽略的隐式转换机制。

Read more

switch和select

switchselect在语法上看起来很相似,但它们是为解决完全不同的问题而设计的。

简单来说:

  • switch值(Value) 的选择。
  • select通道(Channel) 的选择。
Read more

服务器免密登陆

配置 SSH 免密登录(Mac)

方案的原理是:在 Mac 电脑上生成一对“密钥”(一个公钥,一个私钥),然后把“公钥”(相当于一把锁)放到远程服务器上账户的“钥匙串”里。之后,你每次用 scpssh 连接时,你的电脑会自动用“私钥”(你的钥匙)去开服务器上的那把锁,整个过程无需输入密码。

Read more