被网文带偏的 Go 坑:`json:",inline"` 到底能不能展平结构体?
不少教程把 YAML、BSON 里的 `,inline` 语法误搬到了 Go 标准库 JSON 场景,结果代码能编译、输出却不对。本文用可复现示例说明 `encoding/json` 为什么会静默忽略 `json:",inline"`,并给出标准库里真正可用的结构体展平方式,以及 Code Review 中值得重点拦截的风险点。
用Go编写接口、处理并发任务,既要熟悉语法,也要理解协程之间如何协作。这里结合后端开发实例,讲解通道通信、错误处理与测试,让服务从运行到维护都有章可循。

不少教程把 YAML、BSON 里的 `,inline` 语法误搬到了 Go 标准库 JSON 场景,结果代码能编译、输出却不对。本文用可复现示例说明 `encoding/json` 为什么会静默忽略 `json:",inline"`,并给出标准库里真正可用的结构体展平方式,以及 Code Review 中值得重点拦截的风险点。

Go 的匿名嵌入配合 `encoding/json` 很容易在同名字段上踩坑,尤其是“既不报错也不赋值”的静默丢数据。本文用两个典型场景拆开说明标准库的判定规则,再给出三种更稳妥的处理办法,方便你判断该改结构、加外层字段,还是接管 `UnmarshalJSON`。

Go 1.26 对 `sync.Map` 的底层实现做了实质性重构,过去“新增 Key 一多就掉速”的判断已经不再成立。基于标准库源码和基准测试数据来看,新版 `sync.Map` 在高并发纯写与混合读写下都明显压过 `RWMutex + map`,但接口装箱和额外内存开销仍是选型时要考虑的成本。

Go 从 1.18 引入 `net/netip`,并不只是给 IP 类型换个名字,而是针对 `net.IP` 在可变性、堆分配和哈希查找上的老问题做了重构。本文从底层表示、并发安全、`map` 使用方式和基准测试几个角度,说明为什么新代码更适合优先采用 `netip.Addr`。

Go 并发模型很轻,但这不等于常见类型可以随手共享写入。本文按 map、slice、string/interface、struct 指针以及 Buffer/Builder 几类高频对象,拆开说明它们为什么会在并发下失效,以及该用锁、原子类型还是分片写入来规避问题。

Go 编译器报出“is a program, not an importable package”时,问题不在导出符号,而在于目标包本身是 `package main`。这篇文章从编译模型、导入边界、测试例外和工程重构四个角度说明原因,并给出更适合复用代码的 Go 项目组织方式。

这篇文章围绕 Go 项目里的生产级配置管理展开,重点说明 Viper 如何实现“默认值、配置文件、环境变量”分层覆盖,以及怎样通过文件监听完成零重启热更新。文中同时补出结构体映射、并发安全和 K8s 场景下的几个常见坑,便于判断方案是否适合直接落地。

在 CentOS 上配置 Go 并发模型,重点不在“把 goroutine 开起来”,而在于把任务拆分、通道通信和同步控制配合好。本文围绕 goroutines、channels、WaitGroup 等核心机制,结合一个可直接运行的示例,说明并发程序应如何搭建、运行,以及调优时该关注哪些参数。

不少 Go 服务在 Linux、macOS 上运行正常,部署到 Windows 后却突然出现静态资源 404 或 `file does not exist`。问题往往不在文件本身,而在把虚拟路径和本地磁盘路径都交给 `filepath.Join` 处理。本文用几个高频场景拆开讲清 `path` 与 `path/filepath` 的边界。

Go 切片最容易被忽视的问题,不是语法,而是容量继承带来的共享写入。本文结合 `append` 覆盖原数组的典型场景,拆解双索引与三索引切片的差异,并说明 `s[low:high:max]` 在接口返回、缓冲区切分等工程场景中为什么值得作为默认防御手法。
![别再让 append 悄悄改掉原数组:Go 三索引切片 s[low:high:max] 的实用价值](https://img.ipython.cn/uploads/20260825/17876288626a8d0d3e492b3566100974.webp)
当下游 HTTP 接口的 P99 延时突然升高,只看到 `http.Client` 的总耗时往往不够用。本文围绕 Go 标准库 `net/http/httptrace` 展开,拆解 DNS、TCP、TLS、TTFB 与连接复用几个关键阶段,给出可直接落地的埋点方式与日志示例,帮助快速判断瓶颈究竟出在网络侧还是服务端处理侧。

大文件传输慢、CPU 居高不下,问题常常不在 Goroutine 数量,而在传统读写路径带来的上下文切换和内存复制。本文围绕 Go 中的 io.Copy 、Linux sendfile 与 HTTP 场景的实际退化点,梳理零拷贝是如何生效的,以及什么情况下会失效。
