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

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

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

Go 里的 io.Discard,不只是“丢数据”这么简单

`io.Discard` 是 Go 标准库里一个很小却很常用的对象:它实现了 `io.Writer`,但会把写入的数据直接丢掉。真正值得关注的不是“丢弃”本身,而是它在 HTTP 连接复用、日志开关、网络读取和测试替身中的实际价值,以及 `ReadFrom` 带来的性能收益。

Go 里的 io.Discard,不只是“丢数据”这么简单

Go 错误处理该怎么用好 errors.Is 和 errors.As

Go 1.13 引入的 errors.Is 和 errors.As,解决了错误被层层包装后难以判断、难以提取的问题。本文从传统字符串匹配的痛点讲起,梳理 Unwrap、%w、错误链,以及两者各自适用的场景,帮助你判断该比对错误值,还是提取具体错误类型。

Go 错误处理该怎么用好 errors.Is 和 errors.As

Go 1.23 的 `unique` 包怎么用:少占内存,也别用错地方

Go 1.23 引入的标准库包 `unique`,把过去常见但容易踩坑的值去重做成了官方能力。它适合重复值很多、比较频繁的场景,既能减少冗余内存占用,也能把等值判断从字符串比较转成更轻量的句柄比较。

Go 1.23 的 `unique` 包怎么用:少占内存,也别用错地方

Go语言命名返回值:什么时候更清晰,什么时候别滥用

Go 的命名返回值不算复杂,却很容易在多返回值、错误处理和 defer 场景里提升可读性。本文从语法、适用场景到使用边界梳理这个特性,帮助你判断它什么时候能让函数签名更清楚,什么时候又该保持普通写法。

Go语言命名返回值:什么时候更清晰,什么时候别滥用

Go 语言中如何实现 RSA 加解密与签名验证

这篇文章用一个更省代码的 Go 封装库,梳理 RSA 在实际开发里的三个基本动作:生成密钥、公钥加密私钥解密、私钥签名公钥验签。示例都基于 `github.com/forgoer/openssl`,适合想快速落地 RSA 功能、同时分清加密和签名职责的 Go 开发者。

Go 语言中如何实现 RSA 加解密与签名验证