Go 语言有必要学 Java 搞注解吗?

Go 没有 Java 式注解,并不是能力不够,而是刻意避开“隐式魔法”的设计选择。本文从注解与 Tag 的区别、Go 的设计哲学、常见场景替代写法和工程取舍四个角度,说明 Go 为什么更偏向显式调用,以及这种克制在维护、调试和编译速度上的实际价值。

Go 语言有必要学 Java 搞注解吗?

如何使用 SQL COALESCE 函数设置 NULL 默认值

COALESCE 是处理 NULL 的常用函数,但真正写进生产 SQL 时,兼容性、类型推导和索引命中往往比语法本身更关键。本文从跨库支持、类型陷阱、WHERE/JOIN 性能影响到 CASE 的替代场景,整理一套更稳妥的使用方法。

如何使用 SQL COALESCE 函数设置 NULL 默认值

Go 语言里的 `//go:` 到底是什么?常见编译指示一次看懂

`//go:` 开头的注释并不是普通备注,而是 Go 编译器识别的编译指示。它们能影响逃逸分析、内联、条件编译、资源嵌入甚至链接行为。本文按使用场景梳理常见指令,说明各自作用、典型写法与风险边界,帮助你在读源码或做底层优化时判断哪些能用、哪些最好别碰。

Go 语言里的 `//go:` 到底是什么?常见编译指示一次看懂

Linux 如何监控 Node.js 应用:从命令行到 APM 的实用选型

在 Linux 上监控 Node.js 应用,工具从命令行到 APM 平台跨度很大。本文按开发、自运维和生产排障三类场景梳理 top/htop、PM2、nodemon、ELK、New Relic、Datadog 与 Node.js 内置 Profiler 的定位,帮助你判断该从哪一层开始搭建监控。 在 Linux 上部署 Node.js 后,很多团队一开始只会盯着进程是否还活着,但真正的监控远不止“服务没挂”这么简单。

Linux 如何监控 Node.js 应用:从命令行到 APM 的实用选型

gdb 调试 C++ 多线程时,如何跳过指定函数调用

在 GDB 调试 C++ 多线程程序时,很多人会以为 `next` 可以像单线程那样跳过函数调用,但 `std::thread` 启动线程后,子线程会立即并发运行,这条路行不通。本文把“跳过线程函数”拆成断点控制、函数退出和线程调度三件事,说明哪些做法有效,哪些只是表面绕开。

gdb 调试 C++ 多线程时,如何跳过指定函数调用

Go语言冷知识:为什么 nil 也能调用函数?

Go 里的 `nil` 之所以有时能调用方法,关键不在“空值是否安全”,而在类型信息和调用方式。本文用指针接收者、接口值和会 `panic` 的反例,拆开说明 Go 编译器到底做了什么,以及哪些场景仍然不能掉以轻心。

Go语言冷知识:为什么 nil 也能调用函数?

写了多年 Go Benchmark,为什么你应该用 `b.Loop()`?

Go 1.24 新增的 `testing.B.Loop()`,把基准测试里最常见的两类问题一起收拾了:一类是结果未使用时被编译器优化掉,另一类是初始化和清理阶段需要手动控制计时。对长期维护 Benchmark 的 Go 开发者来说,它不只是写法变短,更直接影响测试结果是否可信。

写了多年 Go Benchmark,为什么你应该用 `b.Loop()`?