Go 里的编译时断言,究竟能帮你提前拦下什么问题?

Go 没有专门的“编译时断言”关键字,但开发中依然可以借助常量、数组、接口赋值和 unsafe.Sizeof 等语言特性,把一部分错误拦在编译阶段。本文按常见问题拆解几种实用写法,并说明它们各自适合解决什么问题。

Go 里的编译时断言,究竟能帮你提前拦下什么问题?

面试题:Go 语言中 string(65) 输出的为什么不是 65?

`string(65)` 为什么打印出的是 `A`,而不是字符串 `65`?这道常见 Go 面试题考的并不是记忆,而是对字符、`rune`、字符串转换语义的理解。文章会拆开 `string(int)` 的真实含义,并给出把整数转成数字字符串的正确写法与排错提示。

面试题:Go 语言中 string(65) 输出的为什么不是 65?

Go 只有值传递,为什么切片和指针又像“引用传递”?

Go 并不存在“按引用传参”这一独立机制,函数参数一律按值复制。真正容易让人误判的是切片、map、channel 这类值里本身带有底层数据的引用信息,以及指针参数带来的可修改效果。 很多刚接触 Go 的开发者,都会在“值传递”和“引用传递”上卡一会儿:为什么传入 int 改不动原值,传入 slice 却像是能改到外面?

Go 只有值传递,为什么切片和指针又像“引用传递”?

Go 语言中避免循环依赖的最佳实践

Go 的 `import cycle not allowed` 不只是编译报错,更是在提醒包结构已经出现反向耦合。本文从定位方法、五种常见解法到日常预防原则三部分展开,帮助你判断该合并包、抽接口、提公共层,还是改用依赖注入与函数传参。

Go 语言中避免循环依赖的最佳实践

Gin 做 Web 开发时,如何更轻松地构建 RESTful 风格 API?

用 Gin 做 RESTful API,关键不只是把路由写出来,而是把资源命名、参数校验、响应格式和项目结构一起规范起来。本文从 RESTful 设计原则出发,结合 Gin 的路由、中间件和数据绑定能力,整理出一套更适合实际项目落地的实现思路。

Gin 做 Web 开发时,如何更轻松地构建 RESTful 风格 API?

SQL 触发器递归调用问题如何解决

SQL 触发器最容易踩坑的场景之一,就是在触发器内部再次改动自己监听的表。不同数据库对这类递归的处理方式完全不同:有的直接报错,有的默认允许但要求手动拦截。本文按 MySQL、SQL Server、PostgreSQL 与 SQLite 分别梳理限制、报错和可行替代方案。

SQL 触发器递归调用问题如何解决