Go 代码的进化美学:strings.Clone / bytes.Clone

Go 1.18 新增的 strings.Clone 和 bytes.Clone,看起来只是两个小函数,却补上了字符串和字节切片“显式复制”这块长期缺失的表达能力。它们不仅让代码更短,更关键的是把“我要一个独立副本”的意图直接写在代码里,也减少了共享底层内存带来的隐性问题。

Go 代码的进化美学:strings.Clone / bytes.Clone

Go 语言中需要 Async/Await 吗?用 Channel 看懂更适合 Go 的异步写法

Async/Await 在很多语言里是异步编程标配,但放到 Go 里,问题不在于“缺不缺语法糖”,而在于是否已有更合适的并发抽象。本文从 Go 的 CSP 思路出发,对比 Async/Await 与 goroutine、Channel 的职责差异,并用 Future、组合调用、并发控制等例子说明 Go 为什么通常不需要再引入 Async/Await。

Go 语言中需要 Async/Await 吗?用 Channel 看懂更适合 Go 的异步写法

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

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

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

Go 代码的进化美学:time.Since 与 time.Until

Go 在时间计算上的这次小改动,很适合拿来衡量代码可读性:同样是求耗时和截止时间,`time.Since`、`time.Until` 比 `time.Now().Sub(...)` 更直接,也更不容易写反。本文用几个常见场景拆开说明,帮助你判断项目里哪些写法值得替换。

Go 代码的进化美学:time.Since 与 time.Until

Go 语言怎么编写 Windows DLL 动态链接库

Go 不只适合写独立程序,在 Windows 场景里也能编译成 DLL,供 C/C++、Python、C# 等程序调用。本文从环境准备、最小可用示例到导出规则和字符串处理案例,梳理 Go 构建 Windows 动态链接库时最容易踩到的类型、内存和调用约束。

Go 语言怎么编写 Windows DLL 动态链接库

Go 语言实现 MCP 服务中的 Prompt:从核心类型到服务端实践

这篇文章围绕 Go 官方 MCP SDK 中的 Prompt 能力展开,重点说明 Prompt 与系统 Prompt 的区别、核心类型如何配合,以及如何落地到可复用的代码审查和技术问答模板。文中保留关键代码与接口,适合用来快速判断 MCP Prompt 在服务端的实现方式。

Go 语言实现 MCP 服务中的 Prompt:从核心类型到服务端实践

Go 语言中解决浮点数精度问题的最佳实践

Go 里的浮点数精度问题并不是语言缺陷,而是 IEEE 754 二进制表示的天然结果。本文从 0.1 + 0.2 为什么失真讲起,再结合金额计算、精确比较和数据库设计,梳理整数、decimal、math/big 与误差比较四种常见方案的适用边界。

Go 语言中解决浮点数精度问题的最佳实践

厌倦了 Makefile?Go 项目可以试试更直观的 Taskfile

Taskfile 是用 Go 编写的任务运行器,主打用 YAML 管理构建、测试和发布流程。对常写 Go 项目的人来说,它在可读性、跨平台和变量管理上都比 Makefile 更省心,但生态成熟度仍不如后者,是否替换更适合结合项目阶段和团队习惯来判断。

厌倦了 Makefile?Go 项目可以试试更直观的 Taskfile

Go 语言中的 `for range`,不只是遍历 slice 和 map

很多 Go 开发者把 `for range` 只当成遍历 slice、map 的语法糖,但它还能直接处理数组、字符串和通道,而且每种类型的返回值和行为都不一样。本文按实际开发里的高频场景梳理 `for range` 的适用对象、简写方式与常见坑点,帮你判断什么时候能直接用,什么时候要额外注意副本、顺序和阻塞问题。

Go 语言中的 `for range`,不只是遍历 slice 和 map

Go 1.21 新增的 toolchain 指令,到底该怎么理解和使用?

Go 1.21 起,`go.mod` 多了一个容易被忽略的 `toolchain` 指令。它不是替代 `go` 版本声明,而是把“最低语言版本”和“实际构建工具链版本”拆开管理,适合需要统一开发环境、控制补丁版本、逐步升级 Go 的项目。 Go 1.21 之后,`go.mod` 里的 `toolchain` 开始频繁出现在新项目中,但不少人看到它时,第一反应仍是“这和 `go` 指令到底差在哪”。

Go 1.21 新增的 toolchain 指令,到底该怎么理解和使用?